函数定义中单写一行函数名称自身,有什么含义?
static int
stonith_signal_set_simple_handler(int sig, void (*handler)(int)
, struct sigaction *oldact);
static int
stonith_signal_set_simple_handler(int sig, void (*handler)(int)
, struct sigaction *oldact)
{
struct sigaction sa;
sigset_t mask;
(void)stonith_signal_set_simple_handler;
if(sigemptyset(&mask) < 0) {
return(-1);
}
sa.sa_handler = handler;
sa.sa_mask = mask;
sa.sa_flags = 0;
if(sigaction(sig, &sa, oldact) < 0) {
return(-1);
}
return(0);
}
#define STONITH_SIGNAL(_sig, _handler) \
stonith_signal_set_simple_handler((_sig), (_handler), NULL)
请问,上面标红的那行语句有什么含义?
[解决办法]
我写了一下下面的代码,可以看做楼主问题的最简形式,没有错误,但确实不知有何作用,呼唤大侠解析!
int f()
{
return 0;
}
int main()
{
(void)f;
return 0;
}
[解决办法]
这种用法确实古怪,会不会是为了维持堆栈平衡。
[解决办法]
cast to void是允许的,而且可以算是个消除某些编译器/静态代码检查工具警告的惯用法。
不过这里似乎只是消除unused function警告(要是参数则可以解释为消除unused parameter警告)。要找得到对应的汇编都很可能成问题。
[解决办法]
LS的有道理了。
消除“未使用的??”警告。
[解决办法]
有道理,消除未使用警告
[解决办法]
看来我们对代码编译中的warning还不够重视
[解决办法]
10楼说的有道理,这里的原因在于
stonith_signal_set_simple_handler是static的,如果在本编译单元里不使用的话,用gcc -Wall 编译的话就会有以下的警告:
warning: 'stonith_signal_set_simple_handler' defined but not used
所以加上了(void)stonith_signal_set_simple_handler;
不过有点奇怪: 如果是stonith_signal_set_simple_handler是static的,但是又没有函数调用它,难么这个函数有什么用呢?
[解决办法]
C中static可以跨文件访问?
也表示不理解,不过感觉有些认同4楼的