tgm*_*ath 3 c++ gcc templates clang
我最近测试了用clang而不是gcc构建代码。它失败,因为由于模板函数中未使用的参数,我使用-Werror。使用gcc不会发生这种情况。
这是一个小例子:
template <typename REAL> int f(int a){return 42;}
int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)
用clang编译得到我想要的结果:
$clang -c UnusedParam.cpp -Wunused-parameter
>UnusedParam.cpp:1:36: warning: unused parameter 'a' [-Wunused-parameter]
> template <typename REAL> int f(int a){return 42;}
> ^
>UnusedParam.cpp:3:11: warning: unused parameter 'a' [-Wunused-parameter]
> int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)
Gcc只会报告第二个函数中未使用的参数。
$gcc -c UnusedParam.cpp -Wunused-parameter
>UnusedParam.cpp:3:5: warning: unused parameter ‘a’ [-Wunused-parameter]
> int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)
有没有办法执行类似的行为?我也希望gcc生成未使用的参数警告。
编译器:
感谢@DieterLücking,您的评论对我有很大帮助。Gcc似乎仅在实例化模板函数时才会生成未使用的参数警告。对于这种警告,这似乎是一个有效的决定,即使如此,我还是更喜欢Clang的警告。
这是Gcc抱怨未使用的参数的版本:
template <typename REAL> int f(int a){return 42;}
int h(){return f<int>(3);}
Run Code Online (Sandbox Code Playgroud)
Gcc警告:
$ gcc -c UnusedParam.cpp -Wunused-parameter
>UnusedParam.cpp: In instantiation of ‘int f(int) [with REAL = int]’:
>UnusedParam.cpp:4:24: required from here
>UnusedParam.cpp:1:30: warning: unused parameter ‘a’ [-Wunused-parameter]
template <typename REAL> int f(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)