';int';和';char';在C编程语言中定义的类型?
我正在学习C语言是如何工作的。我可以在';int';和';char';在C编程语言中定义的类型?,c,gcc,C,Gcc,我正在学习C语言是如何工作的。我可以在中找到诸如int8\u t、intptr\u t等类型的定义: 但是,我找不到类型的定义,比如char。因此,我的问题是,在哪里定义了int和char呢?在哪个头文件中定义了char? 无处-char是内置类型,而不是用户定义的类型。它是核心语言的一部分。这同样适用于int 所有这些内置类型都没有定义吗? 有。该标准没有定义这些内置类型 请注意,char和int也都是关键字,这意味着您不能将它们用作标识符,因为它们在语言中有保留和已分配的用法 因此,我的问
中找到诸如int8\u t
、intptr\u t
等类型的定义:
但是,我找不到类型的定义,比如
char
。因此,我的问题是,在哪里定义了int
和char
呢?在哪个头文件中定义了char
?
无处-char
是内置类型,而不是用户定义的类型。它是核心语言的一部分。这同样适用于int
所有这些内置类型都没有定义吗?
有。该标准没有定义这些内置类型
请注意,
char
和int
也都是关键字,这意味着您不能将它们用作标识符,因为它们在语言中有保留和已分配的用法
因此,我的问题是,int,char定义在哪里
它们的定义如下:
reader中的第57+页或文档中的第39+页未在任何头文件中定义
char
和int
类型。它们是内置类型,这意味着它们是核心语言的一部分。它们的定义被硬编码到编译器本身中
至于编译器如何定义这些类型,这取决于
int
和char
的定义见第6.2.5节(类型)。例如,char
的定义:
3声明为typechar
的对象足够大,可以存储任何成员
基本执行字符集的。如果基本法委员会的成员
执行字符集存储在char
对象中,其值为
保证是非负的。如果任何其他字符存储在
char
对象,结果值是实现定义的,但应
在该类型中可以表示的值的范围内
其他类型的定义以及每种类型的最小值范围如下。请注意,int8\u t
、intptr\u t
等的“定义”只是内置类型的别名
基本数据类型char
、int
、long
、double
等都是在编译器内部定义的,它们没有在任何头文件中定义。语言标准中规定了其最低范围(可提供非官方的出版前草案)
头文件
将显示特定实现的不同整数类型的范围;下面是我正在使用的实现的摘录:
/* Number of bits in a `char'. */
# define CHAR_BIT 8
/* Minimum and maximum values a `signed char' can hold. */
# define SCHAR_MIN (-128)
# define SCHAR_MAX 127
/* Maximum value an `unsigned char' can hold. (Minimum is 0.) */
# define UCHAR_MAX 255
/* Minimum and maximum values a `char' can hold. */
# ifdef __CHAR_UNSIGNED__
# define CHAR_MIN 0
# define CHAR_MAX UCHAR_MAX
# else
# define CHAR_MIN SCHAR_MIN
# define CHAR_MAX SCHAR_MAX
# endif
/* Minimum and maximum values a `signed short int' can hold. */
# define SHRT_MIN (-32768)
# define SHRT_MAX 32767
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */
# define UINT_MAX 4294967295U
/* Minimum and maximum values a `signed long int' can hold. */
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
同样,这并没有定义编译器的类型,这只是信息性的;例如,您可以使用这些宏来防止溢出。有一个
头,它对浮点类型执行类似的操作
char
类型必须至少能够表示基本执行字符集中的每个值-大写和小写拉丁字母、所有十进制数字、常用标点符号和控制字符(换行符、换行符、回车符、制表符等)char
的宽度必须至少为8位,但在某些系统上可能更宽。关于char
的签名有一些奇怪之处-基本执行字符集的成员保证为非负([0…127]
),但其他字符可能有正值或负值,因此“普通”char
可能与signed char
或unsigned char
具有相同的范围。这取决于实施情况
int
类型必须能够表示至少在[-32767…32767]
范围内的值。具体范围由实现决定,具体取决于字长和有符号整数表示
C是20世纪70年代早期的产物,当时字节和字的大小多种多样——从历史上看,字节的宽度可以是7到9位,字的宽度可以是16到18位,等等。二的幂是方便的,但不是神奇的。类似地,有符号整数有多种表示形式(2的补码、1的补码、符号大小等)。因此,语言定义指定了最低要求,由实现者将这些要求映射到目标平台 我想知道您希望如何定义它?@Eugene Sh。它们在标准中定义:)如果在某些标题中定义非常基本的数据类型,那么应该使用哪种更基本的数据类型来实现这一点?那么这些数据类型将在哪里定义呢?好奇的是,为什么
typedef\u签名字符int8\t代码>和非typedef签名字符int8代码>?(。
丢弃)夸克是由什么构成的???无处
。那么编译器设计者如何知道实现什么呢。是否由他们自行决定?(例如,char
是32位浮点数,double
是两字节字符?)非常感谢!但是我仍然很好奇成为内置的意味着什么?我的意思是它必须被定义在某个地方,对吗?我知道这听起来可能很傻。如果您能给我一些提示,我将不胜感激。它们在标准中有定义。它们不能在其他任何地方定义,因为如果没有任何现有类型或标准中内置的自定义类型声明语句(大小、填充位、符号、对齐…),您如何定义类型?@Christyle:编译器决定int
的长度。当它看到C代码声明了一个int
,它就为这个变量分配了那么多内存。@KevinDTimm我知道-很难找到“类型”一章,因为它的标题非常混乱。官方批准的版本可以在ansi和ISO网页上找到(收费)
/* Number of bits in a `char'. */
# define CHAR_BIT 8
/* Minimum and maximum values a `signed char' can hold. */
# define SCHAR_MIN (-128)
# define SCHAR_MAX 127
/* Maximum value an `unsigned char' can hold. (Minimum is 0.) */
# define UCHAR_MAX 255
/* Minimum and maximum values a `char' can hold. */
# ifdef __CHAR_UNSIGNED__
# define CHAR_MIN 0
# define CHAR_MAX UCHAR_MAX
# else
# define CHAR_MIN SCHAR_MIN
# define CHAR_MAX SCHAR_MAX
# endif
/* Minimum and maximum values a `signed short int' can hold. */
# define SHRT_MIN (-32768)
# define SHRT_MAX 32767
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */
# define UINT_MAX 4294967295U
/* Minimum and maximum values a `signed long int' can hold. */
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif