除了不能在任何程序中使用的变量名之外,cdecl中不允许使用哪些变量名?

时间:2015-03-25 14:10:46

标签: c identifier variable-names cdecl

我一直在玩cdecl而且我注意到有些名字不允许作为标识符,尽管GCC会完美地编译它们。

例如,如果我写

  

int ptr;

  

int pointer;

  

int array;

cdecl给出"语法错误"但是当我在程序中使用它时,GCC会毫无问题地编译它们。因此,cdecl中有一些不允许的标识符。

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

1 个答案:

答案 0 :(得分:1)

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

  

将ptr声明为int

但这有效:

  

将ptr1声明为int

很明显它也不喜欢ptr