我一直在玩cdecl而且我注意到有些名字不允许作为标识符,尽管GCC会完美地编译它们。
例如,如果我写
int ptr;
或
int pointer;
或
int array;
cdecl给出"语法错误"但是当我在程序中使用它时,GCC会毫无问题地编译它们。因此,cdecl中有一些不允许的标识符。
哪些是不能在cdecl中使用的标识符,但可以在程序中使用(即程序编译)?为什么他们不允许?
答案 0 :(得分:1)
pointer
和array
位于cdecl的保留关键字列表中:
char *keywords[] = {
"function",
"returning",
"array", // <--
"pointer", // <--
"reference",
"member",
"const",
"volatile",
"noalias",
"struct",
"union",
"enum",
"class",
"extern",
"static",
"auto",
"register",
"short",
"long",
"signed",
"unsigned",
"char",
"float",
"double",
"void",
NULL
};
至于ptr
,我不知道为什么cdecl认为这是无效的。在cdecl中输入以下表达式也会失败:
将ptr声明为int
但这有效:
将ptr1声明为int
很明显它也不喜欢ptr
。