C++,预处理器语句

4
有人能解释一下这个语句的含义吗?
#define CONST_SIG (void (*) () ) 1

你不理解其中的哪一部分?你知道#define通常是用来做什么的吗? - Rob Kennedy
1
总的来说,最好在整个表达式周围加上额外的一组括号,尽管强制类型转换具有足够高的优先级,因此它可能是安全的。 - Jonathan Leffler
2个回答

3
这个语句将CONST_SIG定义为指向一个没有参数且返回void的函数的指针,该指针被转换为1。如果你有一个指向函数的指针,而且你可能要测试它是否为真,则CONST_SIG将为真可能会有用。
您可以尝试使用cdecl程序,在许多Linux发行版中都可用,来实现C声明的“英语翻译”。这种情况下的示例输出:
cdecl> explain (void (*) () )
cast unknown_name into pointer to function returning void

附注:它说“unknown_name”的原因是我们的指针没有名称。例如,命名为“p”的指针看起来像这样:(void (* p) ())


3

您可以将CONST_SIG传递给期望函数指针的函数,并将值1视为此函数指针的特殊值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接