问题标签 [gcc-pedantic]
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:修复-pedantic“未命名结构”警告
我正在尝试从其他地方(特别是这里)获取一些代码,以便在 gcc 被赋予-pedantic
标志时在没有任何警告的情况下进行编译。唯一的问题是这段代码:
无论我尝试在何处输入结构名称,都会导致编译错误。有没有办法修改给定的代码以满足-pedantic
?或者有什么方法可以告诉 gcc 不要只针对那段代码发出警告?
c - 如何将数组参数作为空指针遍历
我有类似的“通用”过程,如 qsort,它有一个 void 指针(指向一个数组)和一个函数指针参数。这个函数应该适用于任何类型的数组。
例子:
然而,这给了我以下警告(gcc test.c -pedantic-errors):
经过一些研究,我发现使用这样的 void 指针是一种不好的做法。(例如C 中 void 指针的指针算法)
那么标准库是如何为 qsort 做这种事情的呢?查看此代码:(http://aturing.umcs.maine.edu/~sudarshan.chawathe/200801/capstone/n/qsort.c),我看到以下内容:
无论实际类型如何,他们都转换为 (char *) 吗?
c - 带有 -Wall -pedantic 和 -lpthread 的 gcc makefile
我试图从模板制作一个makefile,这就是我所拥有的:
当我尝试运行它时,我收到此错误:
这是我的 makefile 在 -Wall 和 -pedantic 之前的样子,它运行正常:
c++ - 链接 PAPI 时出现迂腐错误
我正在尝试在 Arch Linux x86_64 中构建一些使用 PAPI 5.4.3.0 库的项目。
为简单起见,我在这两个文件中复制了我不理解的内容:
A.cpp
B.cpp
编译它(到目标文件)时,我得到以下信息:
为什么-pedantic标志会引发错误,而不是警告?(2)
为什么第 3 次运行没有引发任何问题(仅通过切换包含)?
c - 前向定义结构和类型,没有任何警告
我们大学的作业提交系统 - 而不是专注于编程技能 - 对提交设置了荒谬和不切实际的要求。为了绕过它,我使用预处理器和其他一些技巧将我的作业解决方案合并到一个文件中(要求之一)。
另一个要求是不得出现警告- 并且-Wpedantic
已启用。我前向声明 a struct
innode.h
以便可以在函数调用中使用它:
在另一个文件edge.h
中 - 完整定义如下:
我收到这个警告:
不要被“main.c”的东西弄糊涂了,因为文件像我说的那样被合并了。
什么前向声明是正确且无警告的?
c - 除了 -std 和 -pedantic-errors 以实现可移植性之外,我还需要哪些 GCC 参数?
所以我曾经认为使用-std=c11
并且-pedantic-errors
足以强制gcc
只编译也可以在其他符合标准的编译器上编译的代码(可能在其他平台上,假设没有使用特定于平台的库),例如其他版本的 gcc 或其他编译器完全。
然而,显然在 Windows 7 上的 mingw 下编译两者都-pedantic-errors -std=c11
允许编译包含以下内容的代码:
这导致相同的代码,也使用 gcc 两者-pedantic-errors -std=c11
都在 Ubuntu 下失败error: declaration does not declare anything
如果 ISO-C11 中不允许匿名成员 like,那么为什么 gcc 首先让该代码通过?我-pedantic-errors -std=c11
实际上错过了什么?我还需要哪些其他参数(如果有)来确保 gcc 仅编译足以在其他版本的 gcc、其他平台和/或其他编译器上工作的代码,因为这些编译器本身是符合标准的?即使其跨平台一致。
我不是在问目的-pedantic-errors
是什么,而是什么参数可以强制 gcc 只编译可以在任何地方编译的代码(即没有特定于 gcc 的扩展或并不总是有效的非标准东西)。因此-pedantic-errors
,更严格的是,由于-pedantic-errors
仍然允许扩展,它只禁止标准中明确禁止的扩展。
c - 分配内存后使用 getchar 时 C 程序崩溃
我正在制作一个必须使用-ansi 和-pedantic 的C 程序。我想读取标准输入,但是当我调用 getchar() 时程序崩溃了。这是导致错误的行:
当我正常运行时它说
和 GDB
编辑:
这是我的分配代码
和标题:
c++ - 使用 -pedantic 编译时采用 std::reference_wrapper 的模棱两可的构造函数
我有一个具有复制构造函数和构造函数的类std::reference_wrapper
:
正常编译时(g++ --std=c++17 test.cpp
),它可以按要求工作,依次调用四个构造函数:
-pedantic
但是,使用(ie, )编译g++ --std=c++17 -pedantic test.cpp
会导致以下错误(以及另一个等效的错误std::cref
):
为什么会这样(即,我如何违反标准,在Conversion constructor vs. conversion operator: priority中回答),以及如何在不-pedantic
符合标准的情况下获得结果?
c++ - -Wno-pedantic 在旧版 gcc 上被忽略
我有一个 C++ 应用程序,我在其中使用零参数变量宏。但是,我真的不喜欢在各种答案中在 SO 上发布的符合标准的解决方案,而是保持 GCC 特定##__VAR_ARGS__
。
不过,我想尽可能多地收到警告。
我的构建系统是介子,我传递了选项--buildtype=debugoptimized --warning_level=2 --werror=true
并指定-Wno-pedantic
为附加项目参数。
Ob Ubuntu 18.04, gcc 7.3.0, meson 0.45.1 这为编译器添加了以下选项:-Wall -Wextra -Werror -Wpedantic -Wno-pedantic -std=c++11
一切正常。
CentOS 7.4.1708、gcc 4.8.5、meson 0.44.1 上的相同代码、相同选项向编译器添加了完全相同的选项,但无法编译,我收到以下错误:
ISO C99 requires rest arguments to be used
(对于可变参数宏)
似乎-Wno-pedantic
在这个编译器中被忽略了。
我可以稍微尝试一下警告选项,但无论是在 Ubuntu 还是 CentOS 上,构建都失败了。当 Ubuntu 构建失败时,错误消息有点不同:
ISO C++11 requires at least one argument for the "..." in a variadic macro
到目前为止,我发现使两个构建都成功的唯一解决方案是使用meson --buildtype=plain --warning_level=1 -werror=true
和设置-Wall -Wextra
为项目参数。
所以我不确定这是编译器问题、介子问题还是我遇到的一些不幸的版本差异。
c++ - 使用非扩展 -std 编译时 -Wpedantic 会做任何事情吗?
如果我使用 GCC 编译我的 C 或 C++ 代码,使用-std=c99
或-std=c++11
或其他一些适当的 ISO 标准而不是 GNU 扩展 - 会-Wpedantic
发出更多我通常会得到的警告吗?例如与-W
,-Wall
或-Wall -Wextra
?