忽略c代码块中未使用的变量
我有一个很大的C代码库,其中一部分是从Oracle Pro*C预编译器生成的代码 我们使用GNUGCC编译器 Pro*C预编译器生成的代码包含未使用的变量,这些变量会发出许多与忽略c代码块中未使用的变量,c,oracle,gcc,pragma,unused-variables,C,Oracle,Gcc,Pragma,Unused Variables,我有一个很大的C代码库,其中一部分是从Oracle Pro*C预编译器生成的代码 我们使用GNUGCC编译器 Pro*C预编译器生成的代码包含未使用的变量,这些变量会发出许多与-Wunused variable相关的警告,我希望忽略这些警告 我在其他问题中发现,我尝试了以下方法,但对于C代码不起作用(简化为一个最小的示例) 对于变量a,我仍然得到-Wunused变量错误 aa.c: In function 'main': aa.c:8:13: warning: unused variable
-Wunused variable
相关的警告,我希望忽略这些警告
我在其他问题中发现,我尝试了以下方法,但对于C代码不起作用(简化为一个最小的示例)
对于变量a
,我仍然得到-Wunused变量错误
aa.c: In function 'main':
aa.c:8:13: warning: unused variable 'b' [-Wunused-variable]
int b=0;
^
aa.c:6:14: warning: unused variable 'a' [-Wunused-variable]
int a=0;
^
GCC命令:
gcc-8 -Wall -Wextra -pedantic aa.c -o a
如果您想知道,如果我删除pop
pragma,则不会发出警告。我找到的解决方案是在生成的有问题的变量之前添加\uuuuu属性((未使用))
。在这种情况下,始终只有4个相关变量,因此这是可能的
我在Pro*C预编译器之后的make文件中编写了一个bash命令:
for var in varA varB varC varD; do sed -i "0,/${var}/{s/\(${var}\)/__attribute__((unused))\1/}" $file_name; done
希望它能对某些人有所帮助。这是因为警告只有在定义完块后才能生成。因此,一个可能的解决方案可能是使用{}
将包含不需要警告的未使用变量的代码封装在它们自己的块中
但最好清理代码。@SimonW您正试图在代码中添加pragmas,因此我假设您拥有控制权……虽然这不可能产生短期解决方案,但我敦促您向Pro*C人员投诉。生成这样的代码会产生明显的警告,这是非常不负责任的。希望您的代码在编译时不出现警告(就像您所做的那样)并不是什么童话故事,这是一种常见且推荐的行业实践。也许您可以重构代码,使所有Pro*C都在专用函数中,然后在整个部分禁用该警告
for var in varA varB varC varD; do sed -i "0,/${var}/{s/\(${var}\)/__attribute__((unused))\1/}" $file_name; done