全棧工程師Eric 2023-06-01 10:47 采纳率: 62.5%
浏览 95
已结题

gcc中的预处理得到的.i文件的内容

gcc 预处理后的.i文件内每一行所表达的意思是什么?
#1 是什么意思? “srcf_inclusion.c”是什么? 为什么又重复了一遍 。built_in>是什么? /usr/include/stdc-predef.h是什么? 后面的 1 3 4 又表达什么? command-line是什么? 后面的 2 是什么?#2又是什么? 为什么有的是”“ 有的是 <>?
求解答,请详细解答。

gcc -E srcf_inclusion.c -o srcf_inclusion.i
srcf_inclusion.i:
#  1  "srcf_inclusion.c"
#  1  "<built-in>"
#  1  "/usr/include/stdc-predef.h"  1  3  4
#  1  "<command-line>"  2
#  1  "srcf_inclusion.c"
#  1  "srcf_inclusion.h"  1
int a;

int b;
#  2  "srcf_inclusion.c"  2
int main(int argc, char *argv[])
{
  prinf("Joran\n");
  return 0;
}

  • 写回答

4条回答 默认 最新

  • Minuw 2023-06-01 10:57
    关注
    获得6.00元问题酬金

    可采纳

    gcc - E srcf_inclusion.c - o srcf_inclusion.i
    srcf_inclusion.i:
    #  1  "srcf_inclusion.c"        //# 行号 "源文件名",表示源文件的第一行,文件名为srcf_inclusion.c。
    #  1  "<built-in>"                //# 行号 "",表示编译器内建的头文件。
    #  1  "/usr/include/stdc-predef.h"  1  3  4  //# 行号 "文件名" 行号 "标识符",表示头文件包含,其中“ / usr / include / stdc - predef.h”是系统自带的头文件。
    #  1  "<command-line>"  2   //来自命令行的代码。
    #  1  "srcf_inclusion.c"        //# 行号 "源文件名" 
    #  1  "srcf_inclusion.h"  1        //# 行号 "头文件名",表示#include指令包含的头文件“srcf_inclusion.h”。
    int a;
    
    int b;
    #  2  "srcf_inclusion.c"  2
    int main(int argc, char* argv[])
    {
        prinf("Joran\n");
        return 0;
    }
    ```c++
    

    srcf_inclusion.i中每一行所表达的意思如下:

    1. 第一行:# 行号 "源文件名",表示源文件的第一行,文件名为srcf_inclusion.c。
    2. 第二行:# 行号 "",表示编译器内建的头文件。
    3. 第三到六行:# 行号 "文件名" 行号 "标识符",表示头文件包含,其中“/usr/include/stdc-predef.h”是系统自带的头文件。
    4. 第七行:# 行号 "",表示指令行参数。
    5. 第八到十行:# 行号 "源文件名" 行号 "头文件名",表示#include指令包含的头文件“srcf_inclusion.h”。
    6. 第十一行:int a;,表示源代码中的变量定义。
    7. 第十三到十四行:int b;,表示源代码中的另一个变量定义。
    8. 第十五到十七行:# 行号 "源文件名" 行号 "行号",表示源代码中的main函数,其中第二个行号2表示在源文件的第2行定义了main函数。
    9. 第十八到二十行:main函数的实现代码,其中包含一条printf函数的调用语句。
      通过查看源文件和预处理后的.i文件可以对程序中的宏和文件包含进行全面的了解,并且也可以帮助进行调试和代码优化。
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 修改了问题 6月1日
  • 修改了问题 6月1日
  • 创建了问题 6月1日