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

列出C常量/宏

  •  9
  • ZJR  · 技术社区  · 15 年前

    有没有办法 GNU C预处理器 氯化聚丙烯(CPP) 或者其他工具 )列出所有可用宏及其在 C 文件?

    我正在寻找特定于系统的宏,同时移植一个已经精通Unix的程序,并加载少量的Unix系统文件。

    只是想知道是否有比寻找定义更简单的方法。

    5 回复  |  直到 9 年前
        1
  •  15
  •   Carl Norum    15 年前

    我不知道文件中的某个点,但使用:

    $ touch emptyfile
    $ cpp -dM emptyfile
    

    转储所有默认值。对C文件执行相同的操作 #include #define 其中的行也包括所有这些。我想你可以把你的文件截短到你关心的地方,然后再做同样的事情?

    man page :

    -dCHARS
    CHARS 是以下一个或多个字符的序列,不能以空格开头。其他字符由编译器正确地解释,或保留给将来的gcc版本,因此被静默地忽略。如果指定行为冲突的字符,则结果未定义。

    M
    而不是正常输出,生成 α定义 用于在预处理器执行期间定义的所有宏的指令,包括预定义的宏。这为您提供了一种查找预处理器版本中预定义内容的方法。假设你没有foo.h文件,命令

        touch foo.h; cpp -dM foo.h
    

    将显示所有预定义的宏。

    如果你使用 -dM 没有 -E 选项, -DM 被解释为 -fdump-rtl-mach .

    D
    喜欢 除了两个方面:它不包括预定义的宏,并且它输出 α定义 指令和预处理的结果。这两种输出都转到标准输出文件。

    N
    类似于d,但只发出宏名,而不是它们的扩展名。

    I
    产量 包括: 除预处理结果外的指令。

        2
  •  1
  •   JayM    15 年前

    使用gcc,可以使用“-dd”选项将所有宏定义转储到stdout。

        3
  •  0
  •   dirkgently    15 年前

    为什么不查阅一下 Predefined-macros ?你需要这个来建立一个项目或类似的东西吗?

        4
  •  0
  •   t0mm13b    15 年前

    要使用宏列出“C文件中给定点的值”,有两个可以在C文件中演示给定点,特别是在编译时,并且被认为对跟踪故障点很有用……请考虑在名为 Fo.C :

    if (!(ptr = malloc(20))){
        fprintf(stderr, "Whoops! Malloc Failed in %s at line %d\n", __FILE__, __LINE__);
    }
    

    如果在该文件中多次使用该代码逻辑, malloc 如果失败,您将获得以下输出:

    Whoops! Malloc Failed in foo.c at line 25
    

    根据源代码中使用逻辑的位置,行号将有所不同。此示例用于显示宏的使用位置…

        5
  •  0
  •   Petr Vepřek    9 年前

    这里是一个 link 到概述 列出预定义宏的命令行选项 对于大多数编译器( gcc ,请 clang ……)