【发布时间】:2019-06-11 14:29:22
【问题描述】:
我呼吁大家帮助我了解如何读取预处理器输出。我正在尝试在 Ubuntu 18.04 上完成一个简单 C 应用程序的编译过程。
代码更简单.c
#include "simpler.h"
int main()
{
// This is a comment
return 0;
}
为了更简单.h
int y;
然后我运行命令
username$ cpp simpler.c simpler_cpp
然后生成如下预处理的 c 文件
# 1 "simpler.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "simpler.c"
# 1 "simpler.h" 1
int y;
# 3 "simpler.c" 2
int main()
{
return 0;
}
查看此内容我不确定我是否遵循如何阅读此文件?或者至少用我理解的术语来表达。但是,我确实看到我的评论不再存在,并且我的头文件中有我的行。但除此之外,这不是太清楚。
我试图用这个文件给自己讲一个“故事”,例如“#1 是文件的预处理器索引,所以总共有 #1、#31、#32 和 #3 或 4 个文件”。那个“#31”是什么意思……我真的不知道是什么意思?
如果有人能帮我解释这个文件,我将不胜感激。
我一直在尝试关注页面http://gcc.gnu.org/onlinedocs/cpp/index.html#Top 但它读起来更像是一本百科全书,如果你知道路线图虽然很好,但如果你从一开始就变得更具挑战性。
可能的答案: 谢谢你们的回应, 根据https://gcc.gnu.org/onlinedocs/gcc-9.1.0/cpp/Preprocessor-Output.html#Preprocessor-Output
在读取预处理的 c 文件的输出时,首先扩展宏,删除 cmets,并丢弃长时间运行的空白行。
我读了这行
# 1 “更简单的.c”
是一个线标记,表示以下行源自文件“simpler.c”的第 1 行。
文件后没有标志,文件中没有描述。
我能做的另一件事是看这条线
# 1 "simple.c"
并说文件simple.c 存在,然后忽略它。这可能是最实际的做法。除了我不知道是什么
#1“内置”
# 1 “命令行”
意思是?
如果我忽略这些,那么我会得到一些看起来像
int y;
int main()
{
return 0;
}
这是我最初对 cpp 的描述所期望的。
当天的最后一次编辑。我发现的一件事是命令
cpp -P 更简单的.c 更简单的_cpp
给出输出
int y;
int main()
{
return 0;
}
手册页中有一个 no #line 标志,它输出没有任何行信息的预处理文件。我猜这确实是唯一重要的输出。我猜这个输出应该有一个 .i 扩展名,但我不知道。哦,好吧,我希望这对其他人有用。如果我在那里找到任何好的信息,我会尝试写一些东西。
【问题讨论】:
-
# N "file"标记给定文件中的行号N。后缀数字告诉您有关文件处理状态的信息(大致如下:1 开始,2 完成,3 和 4 与嵌套包含的文件相关)。或者干脆忽略#行;它们是对预处理器输出的“评论”。
标签: c c-preprocessor