我不是宏向导,我想知道是否有一种方法使用_Generic宏来评估基于常量的函数。截至目前,我的宏如下:
#define getData(data) _Generic((data), 1: printone, default: printdefault)(data)
如果在C中无法做到这一点我欢迎其他建议!我不认为这是必要的,但如果需要更多代码来回答这个问题,那么我很乐意提供它。
谢谢!
答案 0 :(得分:0)
这是不可能的。通用关联的左侧必须 1 由类型或关键字default组成。
由于您正在对常量进行硬编码,因此没有理由不对该类型进行硬编码:
#define getData(data) _Generic((data), int: printone, default: printdefault)(data)
常量1将始终具有int类型,但如果您要使用具有较大值的常量(可能具有其他签名类型),只需将这些类型添加到_Generic选择中。
以下内容将涵盖仅使用数字形成的所有可能的有符号整数常量。换句话说,任何整数常量,甚至是大整数常量,如9223372036854775807
都将被涵盖:
#define getData(data) _Generic((data), int: printone,
long: printonel,
long long: printonell,
default: printdefault)(data)
1 (引自ISO / IEC 9899:201x 6.5.1.1通用选择1.)
通用关联:
type-name:assignment-expression
default:assignment-expression