刚刚得知这里是-Wsequence-point
comiplation标志将弹出时,代码可以调用UB警告。我试过这样的声明
int x = 1;
int y = x+ ++x;
而且效果很好。到目前为止,我已经使用gcc
或g++
仅使用进行了编译-ansi -pedantic -Wall
。您还有其他有用的标志来使代码更加安全和健壮吗?
总结一下,使用以下标志:
-pedantic -Wall -Wextra -Wconversion
首先,我认为您不想使用该-ansi
标志,如我应该使用“ -ansi”或显式“ -std = ...”作为编译器标志中所建议的那样?
其次,-Wextra
似乎也很有用,正如-Wextra中所建议的,它实际上有多有用?
第三,-Wconversion
似乎也很有用,正如我可以让GCC警告将过宽类型传递给函数吗?
第四,-pedantic
也是有帮助的,如在GCC / G ++编译器中使用-pedantic的目的是什么?。
最后,-Wall
在这种情况下,启用应该可以,所以我对您的发言表示怀疑。
gcc的示例:
Georgioss-MacBook-Pro:~ gsamaras$ cat main.c
int main(void)
{
int x = 1;
int y = x+ ++x;
return 0;
}
Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c
main.c:4:16: warning: unsequenced modification and access to 'x' [-Wunsequenced]
int y = x+ ++x;
~ ^
main.c:4:9: warning: unused variable 'y' [-Wunused-variable]
int y = x+ ++x;
^
2 warnings generated.
Georgioss-MacBook-Pro:~ gsamaras$ gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 8.1.0 (clang-802.0.38)
Target: x86_64-apple-darwin16.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
g ++的示例,相同版本:
Georgioss-MacBook-Pro:~ gsamaras$ cp main.c main.cpp
Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall main.cpp
main.cpp:4:16: warning: unsequenced modification and access to 'x'
[-Wunsequenced]
int y = x+ ++x;
~ ^
main.cpp:4:9: warning: unused variable 'y' [-Wunused-variable]
int y = x+ ++x;
^
2 warnings generated.
我的相关回答是,沃尔因类似的问题再次节省了一天的时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句