【发布时间】:2018-10-30 05:16:39
【问题描述】:
我找到了这段代码,并且我理解它的作用(如果 var 是 float 的类型,则打印)但我不明白如何:
#include <stdio.h>
#include <stdlib.h>
#define typename(x) _Generic((x), float: "float")
#define isCompatible(x, type) _Generic(x, type: true, default: false)
int main(){
float var;
if(isCompatible(var, float))
printf("var is of type float!\n");
}
什么是typename(x)?为什么从来不叫? 我也无法理解这个结构:
_Generic(x, type: true, default: false)
这里有没有办法不将 float 作为参数传递并使其隐含?
if(isCompatible(var, float))
【问题讨论】:
-
“隐含”是什么意思?这似乎与这一点无关。
-
@interjay 我的意思是,如果我总是想知道数据是否是浮点类型,我认为没有必要将 float 作为参数传递并在另一个中定义宏方式。
-
如果你想知道一个变量是否与类型 T 兼容,显然你需要告诉编译器 T 是什么。如果您只想要一个仅适用于
float的IsCompatibleWithFloat宏,您可以在其中硬编码float而不是将其设为参数。 -
@interjay 这正是我想做的,但你所说的“铁杆漂浮在那里”是什么意思?