问题标签 [gcc-warning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 未定义的行为或误报
我(基本上)在野外遇到过以下情况
这显然在早期版本的 gcc 下编译干净(在 gcc 4.5.1 下生成警告)。据我所知,警告是由 -Wsequence-point 生成的。所以我的问题是这是否违反了标准中关于在序列点之间操作变量的措辞(即,它是根据规范未定义的行为)或者这是一个 gcc 误报(即,它是根据规范定义的行为)?关于序列点的措辞有点难以理解。
我说主要是因为我实际遇到的(用更大的表达方式)是
但我认为这对警告并不重要(如果这是重点,而不是我认为的问题的症结,请纠正我)。
linux - warning: forward declaration of ‘struct GLUquadric’
I get the following
With this code
I understand why it does that, GLUquadricObj is in fact a foward declaration, BUT
I want to avoid this warning.
I would like either to suppress this warning for that sole function.
Or resolve the warning by including the right header. I used grep in /usr/include/GL and didn't find the complete type.
I'm using Arch Linux
mesa 7.8.2-3
and
gcc 4.5.1-1
gcc - gcc -rpath 与 -W1 结合是什么意思?
我可以从中看出man gcc
与-W
警告有关,但我无法确切知道-W1
会做什么。我正在使用以下 Makefile.am 进行构建:
在 Ubuntu 上很好,但是 RedHat (RHEL) 抛出一个“路径必须是绝对错误”,所以在找到gtk 邮件列表的帖子后,我尝试了:
哪个有效,但我不明白为什么,我想在依赖它作为我的 Redhat 构建问题的修复之前找出答案。
更新看起来 redhat 没有提供到 @MYSQL_PLUGINDIR@ 的路径,因此 -rpath 失败了。
c++ - GCC -Wuninitialized 没有警告未初始化的结构
g++ -Wuninitialized -O2 test.cpp 不会警告 tm 尚未初始化。Valgrind 会一直这样做,直到添加 memset 行。Linux 上 strptime 的手册页说它应该被初始化,我在一个更复杂的程序上看到随机日期,直到我初始化它。在这些情况下是否有任何 GCC 标志会产生警告?
c - C 警告:函数的隐式声明
是的,这个问题已经被问过很多次了,我一直在寻找和阅读论坛和 SO 帖子,但答案都与这个问题无关(或者看起来如此)。所以,我有这个主文件:
-- sgbd_server.c --
然后头文件:
-- sgbd_server.h --
-- common.h --
两个函数pipe_open
andpipe_close
定义在pipe.c
and 中,基本上是返回0
and void
。最后一个文件在 Make 文件中单独编译。
我不是制作 Make 文件的专家,但为了这个问题,这里是:
**注意** :该文件console.c
并实现了一些功能来控制控制台上的 I/O,没什么花哨的。如您所见,它也是单独编译的。
现在,当我输入时make client
,一切都很好,鸟儿在签名等等。但是当我输入时make server
,它会吐出来
如果有任何区别,我正在 Linux amd64 上运行 GCC(我对此表示怀疑)。
现在,它为什么要警告我呢?这两个函数在 中声明common.h
,包含在sgbd_server.h
... 我在这里缺少什么?
感谢您的时间!
**更新**
谢谢大家的建议。我确实尝试过在我的包含路径中的其他地方是否会有一个文件common.h
以某种方式包含在内......虽然我没有找到任何会在编译过程中滑倒而不是本地common.h
(sig)的文件,但我找到了一些.ghc
文件坐在我的源文件夹中。由于它们没有被清理make clean
,我手动删除了这些文件。你猜怎么了?没有警告。这些文件是什么,为什么要创建它们?
c++ - 强制 GCC 4.x 将 -Wreturn-type 视为错误而不启用 -Werror?
假设我们有以下代码:
并假设要从 GCC 版本 4.2.1 编译 C++ 编译器(而不是 C 编译器),并带有 options -Wreturn-type -Werror=return-type
。如果上面的代码在没有先取消注释上面的行的情况下按原样编译//#define USE_CXX_CLASS
,那么您将看到警告但没有错误:
但如果该//#define USE_CXX_CLASS
行未注释,则警告将被视为错误:
是的,一个是非成员函数(案例 #2),另一个是 C++ 函数(案例 #1)。IMO,那应该没关系。我希望这两个条件都被视为错误,并且我不想在这个时间点添加-Werror
或-Wall
(可能稍后会这样做,但这超出了这个问题的范围)。
我的子问题是:
- 是否有一些我缺少的 GCC 开关应该可以工作?(不,我不想使用
#pragma
's。) - 这是在最新版本的 GCC 中已解决的错误吗?
作为参考,我已经提出了其他类似的问题,包括以下内容:
c++ - MSVC 相当于 __attribute__ ((warn_unused_result))?
我发现__attribute__ ((warn_unused_result))
这是一种非常有用的方法,可以鼓励开发人员不要忽略函数返回的错误代码,但我需要它与 MSVC 以及 gcc 和 gcc 兼容的编译器(如 ICC)一起使用。Microsoft Visual Studio C/C++ 编译器是否具有等效机制?(到目前为止,我已经尝试过 MSDN,但没有任何运气。)
gcc - 针对 libwireshark 进行编译
我正在尝试libwireshark
在 Ubuntu 10.10 上编译一个程序。我已经安装了该wireshark-dev
软件包,该软件包已将文件安装在/usr/lib/wireshark
和/usr/include/wireshark
.
我的 C 源代码文件的头部包含一个#include <epan/epan.h>
指令,我的gcc
命令行参数如下:
但是,这会返回许多错误,包括:
我应该怎么做才能纠正这些问题?
c - 为什么“函数名”在 C 中评估为 true 以及如何得到警告
我最近偶然发现了 gcc 3.2.2 编写 ac 程序的以下行为:
在 if 语句中,我忘记了函数的大括号并写道:
if(myFunc)...
代替if(myFunc())...
尽管我几乎打开了所有警告,但这并没有产生错误,也没有产生警告。
它只是评估为true
。为什么首先要编写法律代码?因为函数存在/有地址?有谁知道如何避免此类错误,或者是否有我忽略的警告选项?这个问题在以后的 gcc 版本中是否得到了更好的解决?
这里确切的编译器要求完整性:
(因为我被迫使用 gcc 3.2.3,所以没有 -Wextra)
visual-studio-2008-sp1 - 强制 VS2008 发出类似于“警告:有符号和无符号整数表达式之间的比较”的 GCC 警告
与从 'int' 转换为 'size_t'中描述的内容相同,可能会改变结果的符号 - GCC , C,我想确保我在 GCC 4.2.1 下收到的警告也被标记在 32 位和 64 位编译下的 VS2008 SP1 下,而不是在 GCC 下禁用警告以适应 VS2008。
例如,在 64 位条件下的 GCC 4.2.1 下,我们在 -Wall 条件下看到以下警告:
GCC 警告是:
但它不会被 VS2008 SP1 64 位编译器标记,无论我尝试什么类型的编译指示,无论我使用 /W3 或 /W4,或 /w3 some_warning_number或 /w4 some_warning_number等启用什么。
现在,我不想降低 GCC 的警告级别或禁用警告,因为他们有很好的理由在那里发出警告。所以我希望 VS 构建在启用 /WX 时以类似的方式失败。这是我必须忍受的事情,还是有一些警告可以在 VS2008 上解决问题?
编辑:警告显示为 32 位版本,但不使用 64 位版本,使用相同的编译器选项集,如下所示:
编辑#1:看到这可能是 Visual Studio 的特质,我发布到Visual C++ 开发人员中心 - 警告 C4018: '<' : signed/unsigned mismatch isemitting for 32-bit but not 64-bit compiler under VS2008 SP1 on 64位窗口。
编辑#2:我被指示从Visual C++ 开发人员中心发布到 Microsoft Connect ,今天(2011-01-11)微软回复了我的问题并将其验证为编译器问题:他们表示该问题将添加待在未来版本中修复的积压工作:Microsoft Connect - 警告 C4018: '<' : signed/unsigned mismatch is only sent between like-sized types。