代码之家  ›  专栏  ›  技术社区  ›  matcheek

“unix”在C中是受限关键字吗?

  •  26
  • matcheek  · 技术社区  · 14 年前

    main() {
      int unix;
    }
    

    为什么会出现以下错误?

    unix.c:2: error: expected identifier or ‘(’ before numeric constant
    
    6 回复  |  直到 4 年前
        1
  •  29
  •   edition    9 年前

    unix 不是标准保留的标识符。

    如果你用 -std=c89 -std=c99

    来自gcc手册( https://gcc.gnu.org/onlinedocs/cpp/System-specific-Predefined-Macros.html ),重点是我的。

    ... 然而, 特定于系统的宏 这是常见的发现 . 对所有人 添加了两个下划线的宏 开始和结束。如果unix是 定义了,unix也会被定义。 下划线;\u mips的平行线为 __米普斯。

        2
  •  12
  •   Nikolaus Gradwohl    14 年前

    unix是gcc中预处理器使用的定义之一 要得到一份使用DEF的列表

    gcc -dM -E  -x c /dev/null
    

    ( -dM公司 告诉gcc调试defs 告诉它在预处理后停止 -x c/dev/null 告诉他假装/dev/null是c文件)

        3
  •  11
  •   Kevin Lacquement    14 年前

    在预处理器中运行代码,找出编译器实际看到的内容:

    gcc -E unix.c
    

    然后看看你的变量 unix

        4
  •  6
  •   codaddict    14 年前

    它不是关键字。

    它是一个 用于标识系统类型的预定义宏 . 在Unix和类Unix系统上,它被定义为 1

    要禁用此功能,请使用 -ansi 选项:

    这就关闭了GCC的某些特性,这些特性与ISOC90(编译C代码)或标准C++(编译C++代码)时不兼容,例如“ASM”和“Type”关键字,以及 预定义的宏,如“unix” 和“vax”来标识您正在使用的系统类型。它还启用了不需要的和很少使用的isotrigraph特性。对于C编译器,它禁止对C++风格/注释以及“内联”关键字的识别。

        5
  •  2
  •   James Curran    14 年前

    我敢肯定gcc在unix系统上将unix定义为1。

    尝试

    main(){ 
      printf("%d", unix); 
    } 
    

    看看你能得到什么。

        6
  •  2
  •   Martin Liversage    14 年前

    unix 不是C中的保留字。

    然而,这个符号