今日免费次数已满, 请开通会员/明日再来

7
我该如何使用gcc工具检查头文件的语法是否正确?

5
写一个桩程序,包含头文件并编译它?没有更多信息,这个问题无法得到有用的答案。 - David Thornley
嗯...在源文件中使用它... - J T
4个回答

19

-fsyntax-only

这个参数可以满足你的需求: 它仅仅检查代码语法,而不进行编译。
echo 'int i;' > good.hpp
echo 'int i' > bad.hpp
g++ -fsyntax-only good.hpp
echo $?
# 0
g++ -fsyntax-only bad.hpp
# bad.hpp:1:5: error: expected initializer at end of input
# int i
#     ^
echo $?
# 1
g++ --version | head -n1
g++ (Ubuntu 4.8.1-2ubuntu1~12.04) 4.8.1

man g++ 的说明:

-fsyntax-only
    Check the code for syntax errors, but don't do anything beyond that.

3
我认为这个答案应该被标记为正确,因为它解释了问题的确切解决方案,而不仅仅是一种权宜之计。 - Mariusz Jaskółka
还会执行类型检查(即除了词法和语法之外,还会执行一些静态语义检查)。 - wcochran

8
您可以尝试使用g++编译它,例如g++ -c myheader.h。这将捕获任何语法错误。

2
g++ -fsyntax-only -Wall -Wextra -Wno-deprecated -std=c++11 myheader.h - wcochran

4
制作一个 CPP 文件,不要包含头文件并编译它 ;)

0
我通常会确保每个头文件都被源文件包含。例如,如果我正在开发的库是仅包含头文件的,我会专门编写一个简单的单元测试来包含任何独立的头文件,并测试该头文件中任何模板的实例化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接