我试图用C11 _Generic宏重载一个函数,如下所示:
int isPrim_int (int num);
int isPrim_lint (long int num);
int isPrim_llint (long long int num);
#define isPrim(_1, ...) _Generic((_1), \
int: isPrim_int, \
long int: isPrim_lint, \
long long int: isPrim_llint)但是由于某种原因,使用isPrim()总是返回1,当使用特定的三个函数isPrim_int、isPrim_lint和isPrim_llint时,它按预期工作。有什么线索吗?我使用宏有什么问题?
非常感谢!
发布于 2017-11-11 04:15:22
您“忘记”发布调用代码,但我的水晶球告诉我,您很可能是在“选择”一个函数,但从未真正调用它。当前的_Generic只是计算为一个函数指针,该指针后来在布尔上下文中被解释为"true“。
将()运算符应用于_Generic表达式的结果,以实际调用函数。例如。
#define isPrim(_1, ...) _Generic((_1), \
int: isPrim_int, \
long int: isPrim_lint, \
long long int: isPrim_llint)(_1)您的原始版本也将工作,但您必须按以下方式使用它
int a = 42;
if (isPrim(a)(a))
...这可能不是你想要用的。
https://stackoverflow.com/questions/47234245
复制相似问题