【问题标题】:C++ preprocessorC++ 预处理器
【发布时间】:2010-10-18 10:03:31
【问题描述】:

我使用unix 作为变量名重写了一个简单的C++ 程序。但程序编译失败。

#include <iostream>
int main() {
        int unix = 1;
        return 0;
}

在互联网上搜索了很多之后,我找到了这个网站,它告诉我unix 是预定义的宏,等于1

我想知道所有这些预定义宏的列表。

【问题讨论】:

  • 小写的预定义宏?看起来很奇怪:o
  • 相反,如果您使用的是IDE,您可以将显示的宏的颜色设置为易于识别的颜色。 Visual Studio 有。

标签: c++ linux macros c-preprocessor


【解决方案1】:

您可以使用 GNU 预处理器 cpp 列出所有预定义的宏:

cpp -dM file.cpp

另请注意,unixlinux 等宏是非标准的,您可以使用 -ansi 编译标志禁用它们:

g++ -ansi file.cpp

您还可以使用-ansi 标志和cpp 来获取所有标准预定义宏的列表:

cpp -dM -ansi file.cpp

【讨论】:

    【解决方案2】:

    触摸 mysymdef.h; g++ -dM mysymdef.h 它将生成一个文件 mysymdef.h.gch,其中包含系统的所有预定义符号/宏。文件是二进制的,但经过一些编辑就可以解决。

    详情参考

    http://gcc.gnu.org/onlinedocs/cpp/Invocation.html#Invocation

    http://gcc.gnu.org/onlinedocs/cpp/System_002dspecific-Predefined-Macros.html

    【讨论】:

      【解决方案3】:

      我认为没有您要求的这样的列表适用于所有潜在平台。您可能想查看Pre-defined macros 了解更多信息。 “gcc -dM”可以在 Linux 上运行。

      【讨论】:

        【解决方案4】:
        $ uname 
        Linux
        
        $ cpp -dM <<<'' | grep unix
        #define __unix__ 1
        #define __unix 1
        #define unix 1
        

        【讨论】:

          猜你喜欢
          • 2010-09-07
          • 2011-07-02
          • 2014-02-26
          • 2020-02-09
          • 2019-07-08
          • 1970-01-01
          • 2018-02-10
          • 1970-01-01
          相关资源
          最近更新 更多