gcc-warning 相关问题

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

收到不兼容的指针类型警告,因为函数的返回不是 void* 而是结构指针

这个警告似乎没有必要。 在我的代码中,我有一个函数指针类型 (void*)(*函数指针)(void*数据) 并且有些函数需要这种类型的函数指针作为参数,b...

回答 1 投票 0

如何添加 -Wno-deprecated 以使命令 CFLAG 变量消除已弃用的警告

尝试过: 使所有 CFLAGS += -D-Wno-deprecated 产量: make: *** 空变量名。停下来。

回答 1 投票 0

GCC8 上的 std::string_view 问题

我有一些使用 std::string_view 的简单代码,它在 gcc10 中运行良好,但在 gcc8 中不起作用。 std::string_view 在 GCC 7 中被添加到 C++17 中,因此应该可以使用它。 #包括 我有一些使用 std::string_view 的简单代码,它在 gcc10 中运行良好,但在 gcc8 中不起作用。 std::string_view已添加到GCC 7中的C++17中,所以应该可以使用它。 #include <string_view> using sv = std::string_view; sv ParseScheme(const sv& url) { sv pattern = "://"; if (auto found = url.find(pattern); found != sv::npos) { return sv(url.begin(), url.begin() + found); } return sv(); } 编译给了我: $ g++ main.cpp --std=c++17 -Werror main.cpp: In function 'sv ParseScheme(const sv&)': main.cpp:9:44: error: invalid conversion from 'std::basic_string_view<char>::const_iterator' {aka 'const char*'} to 'std::basic_string_view<char>::size_type' {aka 'long unsigned int'} [-fpermissive] return sv(url.begin(), url.begin() + found); ~~~~~~~~~~~~^~~~~~~ In file included from main.cpp:1: /usr/include/c++/8/string_view:105:56: note: initializing argument 2 of 'constexpr std::basic_string_view<_CharT, _Traits>::basic_string_view( const _CharT*, std::basic_string_view<_CharT, _Traits>::size_type ) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_string_view<_CharT, _Traits>::size_type = long unsigned int ]' basic_string_view(const _CharT* __str, size_type __len) noexcept ~~~~~~~~~~^~~~~ 我实际上做错了什么,还是 gcc8 中的 string_view 刚刚损坏了? 我可以使用 -fpermissive 忽略该问题,但我们使用 -Werror 进行编译,因此 -fpermissive 警告无论如何都会使构建失败。 这里使用的string_view(Iterator,Iterator)构造函数是C++20中添加的。这就是为什么它在 gcc8 中不起作用。 另一种方法是使用 C++17 中可用的 string_view(const char*, size_type) 构造函数: #include <string_view> using sv = std::string_view; sv ParseScheme(const sv& url) { sv pattern = "://"; if (auto found = url.find(pattern); found != sv::npos) { return sv(url.data() + found, url.size() - found); } return sv(); }

回答 1 投票 0

gcc 未检测到内联函数的数组越界

extern void myprint(unsigned char *); 静态内联空 myfunc(无符号字符 *buf) { for (无符号整数 i = 0; i < 20; i++) { buf[i] = i; } } int main(void) { unsigned char...

回答 2 投票 0

为什么 gcc -Wall 会发出有关零长度格式字符串的警告?

我四处搜寻了一下这方面的信息,但没有找到任何令人满意的东西。函数调用是否有一些特殊行为 sprintf(someString, ""); 这就解释了为什么会这样

回答 4 投票 0

-Woverloaded-虚拟,带有默认浅复制运算符

此警告是由 GCC-13 开始的 G++ 编译器发出的。 Clang++ 17 对这段代码很满意。 MSCV 19 产生类似的警告 (39): 警告 C4263: 'Derived &Derived::operator =(const

回答 1 投票 0

警告:获取“结构详细信息”的打包成员的地址可能会导致未对齐的指针值 [-Waddress-of-packed-member]

结构细节_状态{ 结构详细信息_状态D1; 结构详细信息_状态D2; }; 结构详细信息{ 结构详细信息状态详细信息状态[2]; }

回答 1 投票 0

gcc 构建由于 libcpp 中的警告而失败

我正在尝试使用 GCC 版本 >= 12 编译 gcc 编译器,当我运行 make 时出现以下错误 tti -I../../../../gittea/gcc/libcpp -I。 -I../../../../gittea/gcc/libcpp/../include -我...

回答 1 投票 0

esp32-opencv-master flann:错误:insn不满足其约束:

我遵循此存储库文本以便能够在 ESP32-CAM 上使用 openCV。我能够使其与默认库(imgcodecs、imgproc 和 core)一起使用,但是当尝试添加 calib3d 时,我...

回答 1 投票 0

GCC 编译在 VS Code 外部终端中产生错误,但在另一个窗口中打开终端时编译工作正常

我正在尝试在 VS Code 终端中编译 .c 文件,但是在执行时 gcc test.c -o test.exe VS Code 外部终端将产生以下错误: 汇编消息: 致命错误:无法创建 C:...

回答 1 投票 0

GCC 抛出错误,而 clang 在使用 _mm512_permutevar_epi32 时工作正常

我从 GCC 编译器收到此错误 - 错误:“_mm512_permutevar_epi32”没有依赖于模板参数的参数,因此“_mm512_permutevar_epi32”的声明必须是

回答 1 投票 0

为什么这个悬空指针即使在释放内存后仍显示相同的内存地址?

为什么下面程序中的悬空指针在释放内存后仍显示相同的内存地址? #包括 #包括 int main() { 整数a=1; int *ptr_...

回答 1 投票 0

在这种情况下“忽略模板参数的属性”是什么意思?

我的任务是消除一个大型 C++ 项目中的警告,其中大部分不是我编写的,并且针对以下内容发出了更常见的警告之一: std::unique_ptr 我的任务是消除一个大型 C++ 项目中的警告,其中大部分不是我编写的,并且针对以下情况发出了更常见的警告之一: std::unique_ptr<DIR, decltype(&closedir)> dir(opendir(dirToDelete.c_str()), closedir); 警告是 ignoring attributes on template argument 'int (*)(DIR*) {aka int(*)(__dirstream*)}' [-Wignored-attributes] std::unique_ptr dir(opendir(dirToDelete.c_str()), closedir); (DIR、opendir和closedir都在标准头dirent.h中定义。) 我知道这段代码的作用,并且它正在工作,但是警告是什么意思?编译器引用的被忽略的属性是什么?这意味着什么? 被忽略的属性很可能是GCC的nonnull,这表明参数不能为空指针。您可以使用以下代码重现此警告: #include <memory> void closedir(struct DIR*) __attribute__((nonnull(1))); std::unique_ptr<struct DIR, decltype(&closedir)> dir(nullptr, &closedir); <source>:5:48: warning: ignoring attributes on template argument 'void (*)(DIR*)' [-Wignored-attributes] 5 | std::unique_ptr<struct DIR, decltype(&closedir)> dir(nullptr, &closedir); | 问题是函数指针的属性在用作模板参数时会被丢弃。如果您继续使用函数指针,则必须删除该属性(请参阅从函数指针或引用中删除 __attribute__((...))),或者您必须抑制警告(请参阅选择性删除使用 GCC 的警告消息)。 解决方案 一般来说,您不应在删除器是函数指针的情况下创建智能指针,因为这会增加智能指针的大小1),并妨碍优化2)。您正在创建一个 std::unique_ptr,它可以保存与 closedir 具有相同签名的删除器,但删除器原则上可以是任何函数。 相反,更喜欢自定义类型作为删除器: #include <memory> // Exposition-only, obviously use #include <dirent.h> void closedir(struct DIR*) __attribute__((nonnull(1))); // Note 1: In C++20, you could also decltype(lambda) as a deleter type. struct closedir_deleter { // Note 2: Consider adding noexcept. void operator()(struct DIR* d) const { closedir(d); } }; // Note 3: You can create a type alias for this specialization of std::unique_ptr. // Note 4: It is no longer necessary to pass a deleter as an argument to the // constructor, because the deleter is default-constructible, and not a pointer. std::unique_ptr<struct DIR, closedir_deleter> dir; 参见编译器资源管理器中的实时示例 这不仅是更好的做法,它还为您消除了警告。 1) 这是因为std::unique-ptr必须存储指针本身以及函数指针。对于简单的空删除器,它不必存储任何内容。 2) 如果编译器不知道函数指针的确切值,则无法将函数指针优化为直接函数调用。众所周知,函数指针的内联性能通常很差。

回答 1 投票 0

有关将指针赋值给 const 指针的警告

字符a = 0; 字符 b[20] = {0}; 字符c[][20] = {{0}}; const char *aPtr; const char *bPtr; const char (*cPtr)[20]; 字符(*dPtr)[20]; 无效测试(无效) { aPtr = &a; bPtr = b; dPtr = &am...

回答 1 投票 0

禁用 ScopedGuard 的“未使用的变量”

我正在与 Andrei Alexandrescu 和 Petru Marginean 一起玩瞄准镜守卫对象 当您使用 -Wall -Werror 编译它时,您会收到“未使用的变量”错误。以下代码摘自LOKI CL...

回答 1 投票 0

GCC 关于将浮点数提升为 double 的警告

因为 math.h 声明了 int isnan(double x) 和 int isnanf(float x),所以当使用 gcc -O0 -Wall -Wextra -Wpedantic -Wconversion -Wdouble-promotion 编译时,我预计会有以下代码生成。 ..

回答 1 投票 0

如何修复 gcc 警告:缺少“struct <anonymous>”字段的初始值设定项?

我有一个包含匿名结构的联合类型定义。当尝试初始化它时,我总是收到 gcc 4.9.2 (-Wall -Wextra -pedantic) 关于缺少字段初始化程序的警告。然而它

回答 1 投票 0

How to fix C++ gcc compile warning for padding of struct

我有以下看起来无伤大雅的代码: void myFunc(){ 结构立场{ 长双间隔; QString名称; }; // [...] } 当我使用标准版本构建它时......

回答 3 投票 0

使用 printf 格式说明符生成错误符号警告

是否有任何方法可以让 gcc 或 clang 生成警告,以便使用 printf() 格式说明符生成有符号变量与无符号变量不匹配的警告? 我知道使用 -Wformat,但是只代表...

回答 2 投票 0

在“.section”指令中制作 g++ 意外标记

我在 M1 macbbok air 中使用 brew gcc。当我试图编译我的代码时,它会弹出如下错误消息: /var/folders/xc/9rxcj3_s6qbdrxygnq8gvjcc0000gn/T//ccvSMulw.s:3603:29: 错误:

回答 0 投票 0

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