标识符是指C程序中的变量、函数、宏、结构和其他对象的名称,标识符可以包括下面的字符:
l 基本字符集中的字母, a-z 和 A-Z, 标识符是大小写敏感的;
l 下划线字符,_;
l 数字,0-9,但首字符不能为数字;
l 通用字符用来表示其他语言中的字母和数字;
被允许的通用字符定义在C标准的附录D中,与ISO/IEC TR 10176标准中的字符相符。
标识符中也允许使用多字节字符,但是要由C执行程序运行环境来决定哪些多字节字符可以使用。
下面37个关键词为C语言保留,在编译器中有其他意义,不能被用做标识符:
Auto
Enum
Restrict
Unsigned
Break
Extern
Return
Void
Case
Float
Short
Volatile
Char
For
Signed
While
Const
Goto
Sizeof
_Bool
Continue
If
Static
_Complex
Default
Inline
Struct
_Imaginary
Do
Int
Switch
Double
Long
Typedef
Else
Register
Union
下面的例子是正确的标识符:
X dollar Break error_hander scale64
下面的的例子是不正确的标识符:
1st_rank switch y/n x-ray
如果编译器支持通用字符名,a则为有效的标识符,你可以将这它定义为一个变量名:
double a = 0.5;
你的代码编辑器将会以通用字符/u03B1表示a将其保存在文件中。
当在程序中先择标识符时,记住有些标识符已经在C标准库中使用,所以不用使用它来为你的函数或全局变更命名,详见第15章。
编译器提供了预指示符__func__, 你可以使用用此字符串常量来获得函数的名称,这对日志和调试输出很有帮助,例如:
此例中,传一个空指针给函数test_func(),产生一个如下的错误信息:
对于标识符的长度没有限制,但是,大多数编译器认为标识符中只有有限个数的字符才具有意义,换句话说,编译有可能区分不开均很长的标识符,根据C标准,编译器必须视函数名、全局变量名标识符的前31个字母为有意义的(即:外部链接标识符),并且认为其他的标识符至少前63个字符是有意义的。