gcc-warning 相关问题

GCC是GNU编译器集合,包括gcc C编译器和g ++ C ++编译器等。它具有强大的警告功能,可以揭示C和C ++代码中的编码错误。

MSVC 相当于 __attribute__ ((warn_unused_result))?

我发现 __attribute__ ((warn_unused_result)) 非常有用,可以作为鼓励开发人员不要忽略函数返回的错误代码的一种方法,但我需要它与 MSVC 以及...

回答 5 投票 0

如何从 .asm 转换为 .obj 再转换为 .exe?

我正在尝试使用汇编和 NASM 编写一个简单的 Hello World 程序。我编写了代码,并且可以使用 NASM 将 .asm 文件转换为 .obj。然后我被指示为了使 .obj 成为

回答 1 投票 0

识别具有区域设置相关行为的 C 库函数的使用

我想摆脱 C 程序中所有具有区域设置相关行为的函数的使用,将它们替换为类似的函数,这些函数的行为类似于“C”区域设置中的库对应项,

回答 2 投票 0

又一个警告:“<anonymous>”可能会在未初始化的情况下使用

我看到了许多关于同一警告的其他问题,但我的代码似乎不同。 而且,总的来说,我只能通过 -Os 选项才能得到这个。 #包括 使用命名空间 std ; 模板 我看到了许多其他关于同一警告的问题,但我的代码似乎不同。 而且,总的来说,我只能通过 -Os 选项才能得到这个。 #include <iostream> using namespace std ; template <class TYPE,class FUNC> struct AutoDestruct { const TYPE & var ; FUNC func ; AutoDestruct ( const TYPE & v , FUNC f ) : var(v),func(f) {} ~AutoDestruct () { func(var) ;} }; class Dictionary { public: Dictionary & wipe () { cout << "Dictionary.wipe()\n" ; return *this ;} }; static void wipe_dict ( Dictionary * dict ) { dict->wipe() ;} typedef AutoDestruct<Dictionary*,void(*)(Dictionary*)> AutoWipe ; int main () { cout << "enter main function " << __DATE__ << " " << __TIME__ << endl ; Dictionary headers ; AutoWipe auto_wipe( &headers,wipe_dict ) ; cout << "exit main function\n" ; } 命令行是: g++ -std=c++11 -Os -Wall -Wextra test.cpp && ./a.out N.B.:如果我删除 -Os 选项,我不会收到任何警告。 输出是: test.cpp: In function ‘int main()’: test.cpp:9:48: warning: ‘<anonymous>’ may be used uninitialized [-Wmaybe-uninitialized] 9 | ~AutoDestruct () { func(var) ;} | ^~~~ test.cpp:25:46: note: ‘<anonymous>’ was declared here 25 | AutoWipe auto_wipe( &headers,wipe_dict ) ; | ^ enter main function May 13 2024 20:14:01 exit main function Dictionary.wipe() 编译器是: g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 这是我真实代码的一个非常简单的摘录,只是为了暴露警告。 但请注意,在我的真实代码中,执行 auto_wipe 时,我收到警告 AND 段错误! 知道警告+段错误原因吗? 预先感谢! 我认为走一小段路是值得的,因为我想我不是唯一一个最初误读你的代码的人。我认为我正在阅读的代码是这样的: #include <iostream> using namespace std; template <class TYPE,class FUNC> struct AutoDestruct { TYPE& var ; FUNC func ; AutoDestruct(TYPE& v, FUNC f ) : var(v),func(f) {} ~AutoDestruct () { func(var) ;} }; struct Dictionary { Dictionary & wipe () { cout << "Dictionary.wipe()\n" ; return *this ;} }; static void wipe_dict ( Dictionary & dict ) { dict.wipe() ;} typedef AutoDestruct<Dictionary,void(*)(Dictionary&)> AutoWipe ; int main () { Dictionary headers ; AutoWipe auto_wipe( headers,wipe_dict) ; } auto_wipe 存储对 headers 的引用,当调用它的析构函数时,它会调用 headers.wipe();。然后调用 headers 析构函数,一切都很好。 虽然在你的代码中,这里: AutoWipe auto_wipe( &headers,wipe_dict ) ; 您的 auto_wipe 存储对临时 &headers 的引用。当 auto_wipe 的析构函数被调用时,对象 headers 当然仍然存储在相同的内存地址中。然而,由 &headers 产生的临时指针早已消失,并且该成员是一个悬空引用。您可以按照注释中的建议复制指针,也可以按照上面的方式存储对实际对象的引用。 TL;DR:编译器发出警告是正确的。您存储一个悬空引用。使用地址消毒剂会突出这个问题。

回答 1 投票 0

为什么当 enum 或 int 值作为 bool 函数参数传递时 GCC 不发出警告?

我有以下代码: 类型定义枚举 { FOO, 酒吧, 巴兹 } 脚; 静态无效 afunc(bool is_it_on) { /* 完成工作 */ } int 主函数(无效) { afunc(BAZ); 返回0; } 编译这个...

回答 1 投票 0

GCC v12.1 关于串行编译的警告

我今天(2022 年 5 月 12 日)升级了整个 arch Linux 系统。 gcc 也从 v11.2 升级到 v12.1。我尝试使用 g++(gcc 编译器集合的一部分)通过

回答 1 投票 0

GCC -Woverride-init 警告与联合中的匿名结构

我需要定义一个由2个24位字段(总共48位)组成的类型。我没有找到一种方法来使用结构中的位域来做到这一点。所以我用一个联合和两个匿名结构定义了我的类型: 类型定义...

回答 1 投票 0

GCC -Woverride-init 警告联合中存在匿名结构

我需要定义一个由 2 个 24 字节字段组成的类型。我没有找到一种方法来使用结构中的位域来做到这一点。所以我用一个联合和两个匿名结构定义了我的类型: 类型定义联合 { 结构...

回答 1 投票 0

缺少带有 char* 等的“%p”的 GCC“-Wformat”警告

如果我使用 -std=c17 -Wall -Wextra -Wpedantic 和 GCC 13.2.0 编译以下代码,我不会收到任何警告,尽管在与“%p”格式说明符对应的参数中没有使用 void* 。 #我...

回答 1 投票 0

如何暂时禁用GCC警告“Wstack-usage”?

我正在尝试编译一个导入此 BiTStream 文件的项目。 GCC 输出以下错误: 警告:堆栈使用可能不受限制 [-Wstack-usage=] 确实,在编译命令中...

回答 2 投票 0

缺少“%p”与 char* 等组合的 GCC Wformat 警告

如果我使用 -std=c17 -Wall -Wextra -Wpedantic 和 GCC 13.2.0 编译以下代码,我不会收到任何警告,尽管在与“%p”格式说明符对应的参数中没有使用 void* 。 #我...

回答 1 投票 0

GCC:尝试使用 -Werror 或 -pedantic 使用 pragmas

在使用 gcc 编译的文件(几个 .c 和 .cpp 文件)中,我目前有类似的内容: #if 已定义(__GNUC__) && !已定义(__clang__) #pragma GCC 诊断警告“-Wall&qu...

回答 1 投票 0

来自 boost 的警告

我收到很多来自 boost 库标头的警告,有什么方法可以解决这个问题吗? libs/boost/include/boost/numeric/ublas/detail/vector_assign.hpp:382:39:警告:typedef“引用”lo...

回答 2 投票 0

g++ -Wuninitialized 在 std::min() 处不显示警告

我用 g++ -Wuninitialized (g++ Version 7.5.0) 编译了以下代码,但没有收到任何警告: #包括 int main() { 整数a,b; b = std::min(a, 0); } 当你...

回答 1 投票 0

为什么会有未使用但设置了指针的变量警告

我有以下代码: #包括 类测试{ 民众: 测试(int i){ 初始化(一); } 无效初始化(int i){ std::cout<<"i: &q...

回答 1 投票 0

编译器打印 HelloWorld,而 Chat GPT 表示它应该只打印 Hello

下面是我正在编译的代码: #包括 无效主() { printf("你好%c世界 “,0); } 下面是编译器的输出: 你好世界 Bing Chat-GPT 响应:开始 下面是...

回答 2 投票 0

如何解决 C printf %b 格式警告

我收到以下程序的警告 #包括 int 主函数(无效) { int 数字 = 0xff; printf("%B “,数字); printf("%b “,~num); printf("%b &qu...

回答 1 投票 0

gcc12 警告数组类型的shared_ptr 释放后使用

将 gcc 编译器更新到 gcc12.x 版本时,我遇到了一些新警告。 考虑这段代码: #包括 结构测试 { 内联静态 int i = 0; 测试() { ++i;...

回答 1 投票 0

在这种情况下 g++ -Wdangling-reference 警告是否合理?

使用 gcc 13.2 和 -Wdangling-reference 编译我的代码,我很惊讶在这个简单的场景中(godbolt): #包括 #包括 std::string& add_variable(std::...

回答 1 投票 0

GCC 警告将初始化列表分配到向量中

考虑以下 C++ 代码: #包括 #包括 模板 类 InitInt { 民众: 使用base_type = BaseType; 私人的: 基本类型 v...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.