【发布时间】:2021-01-16 21:10:17
【问题描述】:
我正在尝试逐步构建一个大项目。我正在使用Linux 并使用qt-creator 和gcc 编译器。我在.pri 文件中包含一组相关文件,然后构建、测试功能,然后添加一组新的现有文件等等。
项目编译成功,然后我包含了一个包含一些头文件的文件夹,然后编译时我在libc-header-start.h、string.h、cpu-set.h、time.h 和许多其他 stdlib 和系统文件中遇到了许多错误。 missing binary operator before token (、unknown type name __cpu_mask、expected ';', ',' or ')' before '*' token 等错误。
我认为这些很可能是由预处理器错误引起的,例如,如果我忘记了一个半列左右,对吧?
我的问题是,如何在头文件/源文件中找到所有这些错误开始的确切位置,例如,缺少半列的代码行。
【问题讨论】:
-
最有可能出现在第一个标题的
#include行之前,会出现所有错误。如果在此之前还有另一个#include,则它在该头文件的末尾附近。 -
我将从编译单个 .c 文件开始。当第一个失败时,使用
-E获取预处理输出,然后检查发生了什么。您甚至可以将整个预处理文件临时复制粘贴到原始 .c 文件上并尝试编译它。 -
假设“我包含了一个包含一些头文件的文件夹”意味着您在编译选项中添加了
-I /some/new/location,那么您可能不应该直接包含新头目录中的文件 -它们的名称与标准标题冲突。查看新目录中的内容。 -
您还可以使用
gcc -E选项生成预处理文件。然后尝试使用原始命令行选项编译其中一个生成的文件,它应该更容易诊断错误,因为行号将对应于展平的源文件。 -
谢谢大家。错误列表中的第一个头文件是
libc-header-start.h,我的代码中根本没有使用它。也许它包含在其他系统/标准库头文件中。第三个文件是stdint.h,我觉得这很可疑。我将使用gcc -E并通过包含单个文件进行调查。文件夹中的文件名与标准标题不冲突。
标签: c gcc compiler-errors c-preprocessor