Tag: 警告

C警告冲突类型

我的代码是 void doc(){ //mycode return; } 我的警告是 conflicting types for ‘doc’ 任何人都可以解决它。

警告:fopen()调用

嗨,我正在用linux下的stdlib编程。 gcc针对以下代码行发出以下警告,任何想法为什么会这样? FILE *fd; if ( fd = fopen( filename, “rw” )== NULL ) { 并且警告是: warning: assignment makes pointer from integer without a cast. 如何实现这一点,根据stdlib文档,fopen的返回类型是FILE *。 那么为什么还有警告呢?有什么想法吗? – 提前致谢 –

警告:’noreturn’function确实会返回

我正在做一个线程库(用uncontext.h改变上下文)。 我的函数是void类型,我无法返回。 但即使我没有返回,编译时会出现此警告: dccthread.c: In function ‘dccthread_init’: dccthread.c:184:1: warning: ‘noreturn’ function does return [enabled by default] } 这是函数的简化代码(没有一些细节): void dccthread_init(void (*func), int param) { int i=0; if (gerente==NULL) gerente = (dccthread_t *) malloc(sizeof(dccthread_t)); getcontext(&gerente->contexto); gerente->contexto.uc_link = NULL; gerente->contexto.uc_stack.ss_sp = malloc ( THREAD_STACK_SIZE ); gerente->contexto.uc_stack.ss_size = THREAD_STACK_SIZE; gerente->contexto.uc_stack.ss_flags = 0; gerente->tid=-1; makecontext(&gerente->contexto, gerente_escalonador, 0); if (principal==NULL) […]

如何清除“警告:声明不声明任何内容”

当我使用GCC编译程序时,它将显示“警告:声明不声明任何内容[-fpermissive]” 。 有问题的代码如下: typedef int BOOL; 我该如何清除警告?

c在VS2013中编程,警告:printf():“当”不需要参数时参数太少?

嘿伙计们我把这个问题添加到类似的post中: 为什么会出现:警告:printf():第59行的参数太少 并被告知要打开一个新问题。 我的程序仍然可以编译并运行,但是在一个简单的printf语句中继续使用这个红色下划线,说的too few arguments 。 但它只是输出一条消息而不需要参数。 printf(“Demonstrating use of operators with an integer variable called ‘operation’…\n”); //<<-Warning printf("operation = %d and -operation = %d\n", operation, -operation); 我改变文本的内容并不重要,它总是带有红色下划线的警告。 它仍然编译并运行,但不知道它为什么一直警告我。 在添加普通printf输出简单消息之前,没有任何警告。 如果我将其删除并键入一个新的,它会回来。 如果我把它作为最后一行代码而不是第一行代码,它仍然会这样做。 知道可能导致此警告的原因是什么? 注意:在这部分代码之前我确实有很多其他的东西,这些是c文件中最后一个函数的最后两个语句。 让我知道你是否想要看到所有这些,但它很多。 所有这些只是基本的东西和卡车的评论(自己只是学习c的注释)。

警告:忽略使用属性warn_unused_result声明的’realloc’的返回值

我很好奇,我正在使用PuTTy编写C语言 ,有谁知道我怎么能摆脱这个警告? 警告:忽略’realloc’的返回值,使用属性warn_unused_result声明[-Wunused-result] realloc(strp-> data,nbytes); ^ 它想要’警告’我的线的相关代码: //If the previously allocated size is > 0 then we can reallocate //otherwise we have to make a new allocation in memory if(strp->length > 0) { realloc(strp->data, nbytes); } else { *strp = kstralloc(nbytes); } 提前致谢

为什么-Winit-self与-Wuninitialized分开

这个问题是关于让gcc编译器在输入拼写错误并用自己初始化变量时发出警告。 int f() { int i = i; return i; } 事实certificate除了-Wuninitialized之外你还需要-Winit-self标志 : -Winit-self ( -Winit-self C,C ++,Objective-C和Objective-C ++)警告用自己初始化的未初始化变量。 请注意,此选项只能与-Wuninitialized选项一起使用,而该选项仅适用于-Wuninitialized及更高版本。 我的问题是:为什么这不是-Wuninitialized的默认行为? 你想要警告未初始化变量的用例是什么,而不是自我初始化的变量,这同样麻烦?

如何使特定的“无符号与零无意义的比较”警告沉默?

假设我有如下函数: #define LOWER_BOUND 0 #define UPPER_BOUND 42 int is_value_in_range( some_typedef val) { return ((LOWER_BOUND <= val) && (val <= UPPER_BOUND)); } 假设我已经正确配置了警告,如果some_typedef结果是无符号类型,我会得到一个警告,即无符号类型与0进行无意义的比较。当然这是真的,这是有道理的。 但是,让我说我确实希望对零的检查出于一个或多个可能的原因,例如: 虽然边界始终是编译时常量,但它们可能会发生变化(并且宏可能不会“非常”接近函数)。 例如,可以通过将选项传递给编译器来设置边界。 我可能希望防止以后将typedef更改为signed类型,因为typedef的每次使用都可能在更改时不会被仔细检查。 是否有一个体面,合理的便携方式来静音警告,而不是完全关闭它? 如果合理的话,依赖于’STATIC_ASSERT()’的function(可供我使用)是可以接受的。 如果类型更改以强制某人查看代码,我可以打破编译。 但值得注意的是, typeof并不是我在我所针对的所有编译器中都可用的。 我特意寻找C语言解决方案,因此模板在这里没有任何用处……

编译器可以在使用未初始化的值时发出警告吗?

所以,让我说我粗心大意,做一个愚蠢的错字..这个文件: test.c的 #include int main() { int x = x; printf(“%d\n”,x); } 编译好: mymachine:~ oll$ gcc test.c mymachine:~ oll$ ./a.out 1782198366 显然int x = x是一个错误,但编译器在没有警告的情况下接受了这个错误。 我浪费了几个小时来尝试这个错误。 有一个编译器标志,并且可以用于gcc / g ++,当我使用未初始化的堆栈变量时,编译器会给我一个警告吗? 这有可能在将来节省我很多时间。 我试过gcc -O -Wuninitialized test.c – gcc -O -Wuninitialized test.c 。 提前致谢 编辑:我试过-Wall ,没有提到x mymachine:~ oll$ gcc -Wall test.c test.c: In function ‘main’: test.c:7: warning: […]

禁止GCC下的不兼容指针类型特定警告

在我在GCC下的代码中,我得到了很多关于这两种类型的警告。 warning: passing argument 1 of ‘foo’ from incompatible pointer type 和 warning: assignment from incompatible pointer type 我知道通常情况下,这两个是严重警告,表明代码中存在严重错误。 就我而言,无论发生在哪里,我都非常清楚我在做什么,我知道我可以放心地忽略这些警告。 (是的,我很确定) 但现在我的代码已经发展到这样的程度,以至于这些警告掩盖了其他任何事情,实际上隐藏了可能导致我讨厌的错误的潜在警告。 所以我决定抑制它们。 很快我意识到我不知道怎么做。 我的gcc版本是4.4.1,我知道我可以使用: #pragma GCC diagnostic ignore “-Wname” 忽略我想要的任何警告。 但是从我发现的唯一一个大而全面的海湾合作委员会警告清单中,我似乎无法找到这两个警告。 我开始逐一挑选它们并将它们变成错误,以查看由于不兼容的指针类型而导致编译停止的时间,但无效如下。 #pragma GCC diagnostic error “-Wimplicit-int” #pragma GCC diagnostic error “-Waddress” #pragma GCC diagnostic error “-Wreturn-type” …. //etc 所以..问题是,有没有人知道这些警告的名称,以便我可以实际抑制它们? 编辑 由于评论中的讨论,我不得不澄清一种误解,我误以为我不得不相信我必须禁止警告。 我认为在指向结构的指针之间执行显式转换会涉及一些成本(无论多么微不足道)。 所以我的想法,我现在意识到是有缺陷的,因为我的程序正在运行并且已经在不同平台下工作了很长时间,为什么要添加工作来满足编译器? […]