Tag: 编译器警告

execvpe函数的编译器警告

我有一个用c编写的程序,它使用execvpe(3)函数,我有一个行设置包含必需的头文件: #include 我使用以下命令编译此文件… gcc foo.c -o foo …只是为了得到以下警告: warning: implicit declaration of function ‘execvpe’ [-Wimplicit-function-declaration] 我遇到了与引用pthread_create(3)函数的文件类似的行为。 显然不同之处在于,pthread_create(3)手册页明确指出应该“编译并链接-pthread”,exec(3)函数族的手册页没有任何这样的指令。 此外,我在手册或在线中找不到exec(3)系列的类似编译器标志的任何参考。 我很感激您对此事的任何信息。 如果有一些标志我应该在编译时使用,或者如果我在寻找完全错误的解决方案,请告诉我。

警告:忽略使用属性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); } 提前致谢

处理双重间接时避免不兼容的指针警告

假设这个程序: #include #include static void ring_pool_alloc(void **p, size_t n) { static unsigned char pool[256], i = 0; *p = &pool[i]; i += n; } int main(void) { char *str; ring_pool_alloc(&str, 7); strcpy(str, “foobar”); printf(“%s\n”, str); return 0; } ……有可能以某种方式避免GCC警告 test.c:12: warning: passing argument 1 of ‘ring_pool_alloc’ from incompatible pointer type test.c:4: note: expected ‘void **’ […]

警告 – 初始化使得指针来自整数而没有强制转换

我发现了类似的问题,但我不认为它们适用于我的具体问题,所以如果他们这样做我很抱歉! 我正在学习C作为第一年的CS学生,并尝试在C中进行测验,但我无法到达任何地方,因为每次我尝试编译以查看它是否正常工作时我都会收到消息“警告:初始化使指针来自没有演员的整数。“ 我已经解决了所有语法错误(我认为),但我只是因为我的生活无法解决这个问题。 我已经完成了所有的演讲幻灯片,但没有一个能够涵盖这一点。 #include #include int player1score, player2score; char* answer1, answer11, answer111, answer2, answer22, answer222; int geography() { printf (“The first category is geography. Note: Player 1 always goes first.\n”); char* answer1 = AskForStringAndWait(“Player 1: What is the capital of India?”); if (strcmp(answer1,”New Delhi”)==0) player1score++; char* answer2 = AskForStringAndWait(“Player 2: What is the capital […]

“混合声明和代码”警告,是否值得解决?

我最近在gcc上启用了-pedantic选项,现在我有大约两到三页的“ISO C90禁止混合声明和代码”警告。 我对这个项目的目标是能够在任何带有交流编译器的主流系统上部署它,所以我意识到假设C99将在任何地方都得到支持是不明智的,但是它是否值得花时间来解决这些警告? 是否还有那些不支持混合声明和代码的c编译器系统?

警告C4172:返回局部变量的地址或临时

可能重复: 指向局部变量的指针 我已经在这个网站上阅读了很多关于同样问题的其他主题,因为我知道它很常见。 但我想我是愚蠢的,无法弄清楚这样做的正确方法。 所以,我为这些问题中的另一个道歉,我希望有人可以给我一个简单的解决方案和/或解释。 这是整个代码: MAIN.C #define WIN32_LEAN_AND_MEAN #include #include #include LPTSTR GetApplicationPath ( HINSTANCE Instance ); int APIENTRY _tWinMain ( HINSTANCE Instance, HINSTANCE PreviousInstance, LPTSTR CommandLine, int Show ) { LPTSTR sMessage = GetApplicationPath ( Instance ); MessageBox ( NULL, sMessage, _T ( “Caption!” ), MB_OK ); return 0; } LPTSTR GetApplicationPath ( […]

“警告:初始化使得指针来自整数而没有强制转换”。 但我不认为这样做

我收到一个奇怪的编译警告。 它是间歇性的,并不会出现在每个版本中。 对于以下行,我收到警告“初始化从没有强制转换的整数生成指针”: callbackTable *callbacks = generateLoggingCallback(); 而且,为了完整起见,这给出了相同的结果 callbackTable *callbacks; callbacks = generateLoggingCallback(); 函数原型是: callbackTable *generateLoggingCallback(); 并且实施是 callbackTable *generateLoggingCallback() { … } 所以,我不太确定问题是什么。 想法?

未定义/未指定/实现定义的行为警告?

当它注意到具有未定义/未指定/实现定义行为的语句时,编译器是否无法发出警告(如果它抛出错误会更好)? 可能会将语句标记为错误,标准应该这样说,但它至少可以警告编码器。 实施这种方案有任何技术困难吗? 或者它只是不可能? 我得到这个问题的原因是,在a[i] = ++i;类a[i] = ++i;陈述中a[i] = ++i; 在达到序列点之前,不会知道代码试图引用变量并在同一语句中修改它。

Clang的-Wall和-Wextra中包含哪些警告?

我发现Clang的文档很差。 我无法找到很多可用的Clang警告标志列表。 我特别感兴趣的是C / C ++警告,但这是一个普遍的问题。 GCC列出并描述了警告,并列出了-Wall和-Wextra中包含的内容: https ://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options Clang的-Wall和-Wextra包含哪些警告标志? 我可以为每个版本搜索Clang发行说明,以查看每次引入的新警告标记(例如http://llvm.org/releases/3.4/tools/clang/docs/ReleaseNotes.html ),但是更容易列表和/或描述Clang的警告? 这将非常有用。 我需要知道-Wall中包含的内容和不包含的内容,因此我可以考虑启用那些不包含的内容。 (我知道 – Clang的存在 – 我可能不得不求助于使用它而只是明确禁用我不喜欢的那些吗?更多文档会使这更理想。)

当非const参数作为const参数传递时,Intel C ++ Compiler警告167

我有一个很大的代码库,最近从Microsoft的编译器转移到了英特尔C ++编译器。 我们团队的目标是在主线上编辑而不发出警告。 自开关以来,警告167的一个实例让我感到困惑。 如果我编译以下代码: int foo(const int pp_stuff[2][2]) { return 0; } int foo2(const int pp_stuff[][2]) { return 0; } int main(void) { int stuff[2][2] = {{1,2},{3,4}}; foo(stuff); foo2(stuff); return 0; } 国际刑事法院会给我警告: 1>main.c(17): warning #167: argument of type “int (*)[2]” is incompatible with parameter of type “const int (*)[2]” 1> foo(stuff); 1> ^ […]