首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

函数定义中单写一起函数名称自身,有什么含义

2013-01-04 
函数定义中单写一行函数名称自身,有什么含义?static intstonith_signal_set_simple_handler(int sig, void

函数定义中单写一行函数名称自身,有什么含义?
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;
}

[解决办法]
这种用法确实古怪,会不会是为了维持堆栈平衡。
[解决办法]
引用:
话说还真没看出来,感觉也是个错的语句,把函数名做个(void)cast,能编译过?
印象中只有void *,或者函数的返回值为void合法,其余的void的用法都有问题。

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的,但是又没有函数调用它,难么这个函数有什么用呢?

[解决办法]
引用:
引用:
不过有点奇怪: 如果是stonith_signal_set_simple_handler是static的,但是又没有函数调用它,难么这个函数有什么用呢?
……
在别的文件中有对这个函数的调用。

消除未使用的警告,这个解释貌似比较合理

C中static可以跨文件访问?
也表示不理解,不过感觉有些认同4楼的

热点排行