数字常量之前的预期说明符限定符列表

时间:2017-03-01 03:35:57

标签: c macros

我不是宏向导,我想知道是否有一种方法使用_Generic宏来评估基于常量的函数。截至目前,我的宏如下:

#define getData(data) _Generic((data), 1: printone, default: printdefault)(data)

如果在C中无法做到这一点我欢迎其他建议!我不认为这是必要的,但如果需要更多代码来回答这个问题,那么我很乐意提供它。

谢谢!

1 个答案:

答案 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