【问题标题】:cpp preprocessor output not able to understand? [duplicate]cpp 预处理器输出无法理解? [复制]
【发布时间】:2012-03-02 14:20:33
【问题描述】:

对不起,如果我的问题非常基本。我想了解预处理器 cpp 产生的输出。假设我有一个非常基本的以下程序。

#include <stdio.h>
#include <stdlib.h>

int x=100;
int main ()
{
    printf ("\n Welcome..\n");
}

我执行以下命令。

cpp main.c  main.i

在 main.i 中

# 1 "/usr/include/stdio.h" 1 3 4

上面一行是什么意思?..

【问题讨论】:

    标签: c gcc c-preprocessor


    【解决方案1】:

    gcc documentation 恰当地解释了 C 预处理器的输出。

    以下是相关部分:

    C 预处理器的输出看起来很像输入,只是所有预处理指令行都被替换为空行,所有 cmets 都被空格替换。大量空行被丢弃。

    源文件名和行号信息通过表格的行来传达

    # linenum filename flags
    

    这些被称为线标记。它们根据需要插入到输出中(但从不在字符串或字符常量中)。它们意味着以下行源自文件 filename 的行 linenumfilename 永远不会包含任何非打印字符;它们被八进制转义序列替换。

    在文件名之后是零个或多个标志,它们是 1234。如果有多个标志,则用空格分隔它们。以下是标志的含义:

    1 这表示一个新文件的开始。
    2 这表示返回到一个文件(在包含另一个文件之后)。
    3 这表明以下文本来自系统头文件,因此应禁止显示某些警告。
    4 这表明应将以下文本视为包含在隐式 extern "C" 块中。

    【讨论】:

    • @Whoami 很高兴你想了解预处理器。过去我遇到过几个奇怪的 C/C++ 问题,对于这些问题,查看预处理输出是弄清楚发生了什么的唯一方法。对于拥有大量#includes 的大型项目尤其如此
    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 2019-07-12
    • 2011-08-21
    • 2012-02-07
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多