最近,我开始使用lint进行静态代码分析.我有时得到的一个警告就是这个问题.比方说,我有以下功能:
uint32_t foo( void );
Run Code Online (Sandbox Code Playgroud)
让我们说我故意忽略函数的返回值.为了使警告消失,人们可以写
(void) foo();
Run Code Online (Sandbox Code Playgroud)
我的问题是,编写这样的代码的"正确"方法是什么,我应该像往常一样继续,因为编译器不会抱怨它,或者我应该使用void来清楚,所以其他代码维护者会知道我刻意忽略了返回值.
当我看到这样的代码(带有空白)时,我觉得很奇怪......
我在.c中定义了我的函数(没有头声明),如下所示:
inline int func(int i) {
return i+1;
}
Run Code Online (Sandbox Code Playgroud)
然后在下面的同一个文件中我使用它:
...
i = func(i);
Run Code Online (Sandbox Code Playgroud)
在链接期间,我得到了"未定义的引用'func'".为什么?
可能重复:
将未使用的返回值转换为void
(void)例如,在函数调用之前的目的是什么
(void)func1();
Run Code Online (Sandbox Code Playgroud)
我认为这和简单地调用一样 func1();
因此,(void)调用只是为了让其他程序员知道返回类型将被忽略,例如,如果func1()有返回类型int,或者编译器是否可能对函数执行某些优化?也许完全背后还有另一个原因 - 它甚至是合法的C++,还是在某些遗留代码中看到的C的残余.
谢谢
几天前我刚刚开始学习 C 编程,我正在尝试从 Kattis (open.kattis.com) 网站上找到一些问题。一路上我想出了这个问题,但我并不真正理解它的含义。
//two stones
#include <stdio.h>
int main()
{
int n,x=2;
printf("The number of stones placed on the ground is ");
scanf("%d",&n);
if (n%x != 0)
{
printf("The winner of the game is Alice! \n");
}
else
{
printf("The winner of the game is Bob! \n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这出现了>>
警告:忽略 scanf 的返回值,使用属性 warn_unused_result [-Wunused-result] 声明关于 scanf("%d",&n);
谁能解释这有什么问题以及如何纠正这个问题?谢谢。
用 C 编译我的程序时出现此错误。
警告:忽略使用属性 warn_unused_result [-Wunused-result] 声明的“write”的返回值
在我所有的呼吁写作。
FLAGS : -g -Wall -Werror -Wextra -g -O2 // or -Ofast (same result)
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会版本:5.4
当我尝试使用 -O2 或 -Ofast 进行编译时会发生这种情况。
有人可以解释我,为什么这不起作用?
谢谢 :)