20得票4回答
如何打印一个函数的地址?

我使用 -Wall -pedantic 让 gcc 编译了以下示例:#include <stdio.h> int main(void) { printf("main: %p\n", main); /* line 5 */ printf("main: %p\n", (voi...

19得票1回答
GCC v12.1关于串行编译的警告

我今天升级了整个Arch Linux系统(2022年5月12日)。 gcc也从v11.2升级到v12.1。 我尝试使用以下命令使用g++ (gcc编译器集合的一部分)编译我的一些程序:g++ -O3 -DNDEBUG -Os -Ofast -Og -s -march=native -flto ...

19得票5回答
错误:此语句可能会产生“穿透”[-Werror=implicit-fallthrough=]。

我正在尝试在Ubuntu上编译mitk,但是遇到了这个错误: 错误:此语句可能会贯穿而过[-Werror=implicit-fallthrough=] 以下是代码的一部分: /** Get memory offset for a given image index */ ...

18得票4回答
让编译器检查数组初始化器的数量。

在C++(但任何适用于C的解决方案在这里也可能适用)中,使用比数组元素少的初始值器对数组进行初始化是完全合法的:int array[10] = { 1, 2, 3 }; 但是,这可能是一个产生难以发现的bug的源头。是否有一种方法可以让编译器(gcc)检查一个特定数组的初始化器数量,并在声明和...

17得票3回答
为什么GCC在将有符号的字面量分配给无符号类型时不会发出警告?

在该网站上有许多问题揭示了混合使用有符号和无符号类型时的陷阱,大多数编译器似乎能够很好地生成此类警告。 然而,GCC在将有符号常量分配给无符号类型时似乎并不关心!考虑以下程序:/* foo.c */ #include <stdio.h> int main(void) { u...

16得票2回答
为什么GCC警告我这一行“缩进得像是由”if“保护”的一样具有误导性呢?

警告如下:/home/dronz/OF/apps/myApps/HexMap/src/HexMap.cpp:48:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation] if (toHexS...

16得票1回答
如何在GCC中分配或执行不同枚举类型的算术运算时发出警告?

我知道在C语言中枚举类型不区分也是有效的,但GCC有-Wenum-compare选项(我正在使用),并且按预期工作。我尝试了使用-Wconversion选项,但没有任何区别。为什么赋值和算术运算符(+ / - /&/ |等)也会产生警告?(赋值,或等等){ enum Foo f = S...

16得票2回答
GCC -Wuninitialized / -Wmaybe-uninitialized问题

我使用的是gcc-4.7 (Ubuntu/Linaro 4.7.2-11precise2) 4.7.2,遇到了一个非常奇怪的问题。我无法编译下面这个有效的代码,却收到了警告:extern void dostuff(void); int test(int arg1, int arg2) { ...

16得票3回答
为什么std::abs返回有符号类型

当我将std::abs(int)与unsigned进行比较时,会收到有符号和无符号比较的警告。实际上,std::abs返回有符号值。为什么要做出这个选择呢?这将解决不能用有符号类型表示其绝对值的负值的问题。那么,有没有比这更简洁(即不需要强制转换)的方法来避免警告?#include <c...

16得票2回答
如何在变量声明时定义外部变量?

维基百科 上说: extern 关键字意味着“声明而不定义”。换句话说,它是一种显式声明变量的方式,或者强制进行声明但不进行定义。也可以显式定义变量,即强制进行定义。这可以通过将初始化值赋给变量来完成。 也就是说,用初始化赋值的 extern 声明等同于对该变量进行了定义。因此,/...