对于Clang和GCC,-isystem标志都添加了一个"system“包含路径,这将导致编译器不会发出与这些标头中的代码相关的警告。
但是,在我的代码上运行clang-check时,我会看到以下警告:
In file included from <myfile>.cpp:1:
In file included from <Qt-path>/gcc_64/include/QtCore/QCoreApplication:1:
In file included from <Qt-path>/gcc_64/include/QtCore/qcoreappli
#include <stdio.h>
enum class TEST_ENUM{
VALUE =1,
};
int main( ){
// Gcc will warn.
printf("%u", TEST_ENUM::VALUE);
// Both clang and gcc are happy.
printf("%u", uint32_T(TEST_ENUM::VALUE));
}
在上面的示例中,gcc将发出以下诊断信息:
<source>:8:12: warning: forma
我有这个文件:
#include <stdio.h>
int main(void)
{
int i;
printf("%d\n",i);
return 0;
}
如果我在Mint 12上使用gcc 4.6.1进行编译:
CC -Wall -O test_gcc.c
test_gcc.c: In function ‘main’:
test_gcc.c:8:10: warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
与clang 2.9相同的选项不会给出警告。Cla
我试图让openmp在小牛队的程序中运行,但是当我试图使用标志-fopenmp进行编译时,我会得到以下错误:
ld: library not found for -lgomp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我正在运行的命令是:
gcc myProgram.cpp -fopenmp -o myProgram
而且,当我运行gcc时,我收到了Clang警告,我觉得这是非常奇怪的。而查看/usr/bin/gcc,它似乎没有链接到Clang。
关于如何修复我的Clang错误
我想抑制GCC对零参数发出的各种宏参数警告,例如:
// for illustration purposes only:
int foo(int i) { return 0; };
#define FOO(A, ...) foo(A, ##__VA_ARGS__)
FOO(1);
^ warning: ISO C++11 requires at least one argument for the "..." in a variadic macro
当使用GCC 5.3.0时,对于源文件中的特定宏定义。
在clang中这样做如下:
// ... large file
尝试使用%zu转换说明符以十进制形式输出指针地址。运行正常,除了GCC警告
format ‘%zu’ expects type ‘size_t’, but argument 4 has type ‘long int *’
问题中显示了使用的GCC选项。GCC仍然在没有设置任何选项的情况下发出警告(除了-std=c99)。但是,clang根本不会使用相同的选项发出任何警告。这是在OS X 10.7上。只是好奇为什么clang没有发出任何警告?在调试/编译方面,GCC是否比clang“更好”?
我们有一个非常简单的代码,这是一个警告,但似乎应该是好的,并运行良好。我们了解到,一般来说,编译单元之间的初始化顺序可能存在问题,但在这种情况下,我们使用指针初始化,因此不知道顺序如何会导致问题,也不知道该代码如何出现任何问题。注意,在实际代码中,我们有更复杂的结构场景,但下面的代码显示了基本问题。
编辑:删除了const限定符,因为它们不影响警告
file1.c
int foo=42;
file2.c
#include <stdio.h>
extern int foo;
// Clang-Tidy: Initializing non-local variable with no
在我尝试安装的任何R包中,都会收到以下错误消息: ld: library not found for -lintl
collect2: error: ld returned 1 exit status
make: *** [utf8.so] Error 1 我不确定如何使其成为reprex,但我正在运行:R版本4.0.2 (2020-06-22)平台: x86_64-apple-darwin19.5.0 (64位)在macOS Catalina 10.15.5下运行 这个错误消息(ld: library not found for -lintl)是什么意思,我如何修复它才能安装R包(我尝试过
带有模式匹配的函数式语言(有时?)有可能忽略一些绑定值,但使用C++17结构化绑定,似乎无法做到()。建议使用虚拟名称,但随后我们将得到有关未使用变量的警告。
有了最新的clang和gcc的头目,这做了一件令人期待的事情,这很好,也很有用,
[[maybe_unused]] auto x =4 ; // fine, no warning
[[maybe_unused]] auto [a,dummyb,dummyc] = std::tuple<int,int,float>(1,1,1.0f);
但我也希望这能奏效:
auto [g,[[maybe_unused]]dummyh,[[
在以下代码中:
#include <iostream>
int main()
{
const long l = 4294967296;
int i = l;
return i; //just to silence the compiler
}
编译器对隐式转换(使用-Wall和-std=c++14)警告如下:
warning: implicit conversion from 'const long' to 'int' changes value from 4294967296 to 0 [-Wconstant-conversion]
这
我见过,但我不知道从哪里获取标志名称,也不知道如何正确忽略它。
我遇到问题的一个例子是第76行的;我收到警告消息"Declaration of 'struct sockaddr_in' will not be visible outside of this function"。
我该如何获取文件中的名称并忽略此警告?我会放这样的东西吗:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wsemantic-issue"
//reachabilityWithAddres
我为iOS应用程序使用了一个iOS库。在配置了AppleLLVM3.1编译器(默认)之后,我收到了很多关于这段C++代码的警告,其中大多数警告说:
... is a GNU extension
Clang的用户手册介绍说: Clang驱动程序和语言特性是有意设计的,以尽可能与GNU GCC编译器兼容,从而简化了GCC到Clang的迁移。在大多数情况下,代码“只起作用”。
那么,是否只需要寻找一个开关来禁用此警告(顺便说一句)。如何?)还是我应该把这个库去掉所有的GNU扩展呢?
我想知道如果我忽略了K&R函数定义中的参数声明,会发生什么,所以我尝试了以下几点:
#include <stdio.h>
void f(a)
// int a; <--- omitting `declaration-list` causes warning in gcc, but nothing in clang
{
printf("%d", 9);
}
int main()
{
f(9);
return 0;
}
当我用gcc 11编译它时,诊断是以警告(即warning: type of 'a
我想要总结一下在不同的编译器和平台上支持“thread_local”关键字的当前状态。
我对普通的桌面和移动平台特别感兴趣。我所能找到的信息充其量似乎是杂乱无章的,因为它在一些平台上工作,而不是在其他平台上工作,或者提到支持是一个WIP。即使对于单一平台,确认支持(或缺乏支持)的答案也是受欢迎的。如有任何问题,请向支持机构提出任何警告。
窗口(gcc,clang,msvc)
Linux (gcc,clang)
OS X (gcc,clang)
Android (gcc,clang)
iOS
BlackBerry
视窗电话/RT/等