我一直在玩cdecl,我注意到有些名称不允许作为标识符,尽管 GCC 可以完美地编译它们。
例如,如果我写
整数点;
或者
整数指针;
或者
整数数组;
cdecl 给出“语法错误”,但是当我在程序中使用它时,GCC 编译它们没有任何问题。所以,有些标识符在 cdecl 中是不允许的。
哪些标识符不能在 cdecl 中使用,但可以在程序中使用(即程序编译)?为什么他们不被允许?
我一直在玩cdecl,我注意到有些名称不允许作为标识符,尽管 GCC 可以完美地编译它们。
例如,如果我写
整数点;
或者
整数指针;
或者
整数数组;
cdecl 给出“语法错误”,但是当我在程序中使用它时,GCC 编译它们没有任何问题。所以,有些标识符在 cdecl 中是不允许的。
哪些标识符不能在 cdecl 中使用,但可以在程序中使用(即程序编译)?为什么他们不被允许?
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
。