除了不能在任何程序中使用的变量名外,cdecl 中不允许的变量名是什么?

What are the variable names that are disallowed in cdecl other than the ones that cannot be used in any program?

我一直在研究 cdecl,我注意到尽管 GCC 可以完美地编译它们,但有些名称不允许作为其中的标识符。

例如,如果我写

int ptr;

int pointer;

int array;

cdecl 给出了 "syntax error" 但是当我在程序中使用它时,GCC 编译它们没有任何问题。所以,有些标识符在cdecl中是不允许的。

哪些标识符不能在cdecl中使用,但可以在程序中使用(即程序编译)?为什么不允许?

pointerarray 在 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 中输入以下表达式也失败:

declare ptr as int

但这行得通:

declare ptr1 as int

很明显它也不喜欢ptr