我正在删除一堆使用头文件中声明的变量的C代码。出于某种原因,我的编译器不会从头文件中警告未使用的变量。从头文件调用未使用的变量的选项是什么。它是从C文件中做到的。
答案 0 :(得分:2)
首先,编译器本身甚至不知道变量是在头文件还是在.c文件中声明 - 在预处理器运行之后,这是无法区分的。
您通常在头文件中声明的是外部引用,即存储类external
的变量。我知道没有编译器警告这样的变量是否未被使用 - 许多系统头文件都声明了这些变量,如果确实存在警告,那么你会被充满警告(errno
或stderr
是值得注意的例子 - 你不希望收到任何不使用errno
或stderr
的源文件的警告
编译器可以发出未使用的static
变量和未使用的函数参数的警告。这些变量的用法和范围仅限于当前的编译单元或函数,“没有其他人可以使用它们”,因此警告是有意义的。 extern
变量可以很好地被其他目标文件使用,因为编译器无法发出警告 - 但是正确的链接器会意识到任何目标文件都不使用外部符号并静默删除来自最终可执行文件的变量 - 无需警告,因为它可以由编译系统修复。
答案 1 :(得分:0)
对于C编译器,header(包含)和任何其他C源文件之间没有区别。
编译器不必发出有关未使用的全局数据的警告消息,因为此数据可能被其他软件使用。
如果您担心某个数据仅在单个目标文件的范围内使用,请尝试使用static
关键字添加此数据定义,重建并运行您的软件。如果一段时间后一切仍然正常,你肯定知道任何可能的(懒惰的)动态链接仍然会很乐意丢失你刚删除的全局数据 - 删除它真的是100%安全。