组合两个_Generic时会出错

时间:2016-03-21 16:22:46

标签: c macros c-preprocessor

我想在 C 中组合两种类型来调用函数(比如乘法向量和具有不同列和行的矩阵):

#define CC_FIRST(a)        _Generic((a), int: int8d)
#define CC_SECOND(b)       _Generic((b), int: int16d)
#define CC_SP(first, second) first ## second
#define TEST(a,b) CC_SP(CC_FIRST(a), CC_FIRST(b)) (a,b)

int test1 = 10;
int test2 = 25;

TEST(10,25); // => int8dint16d(10,25), but not work

并且有这个:

  

粘贴“)”和“CC_FIRST”不提供有效的预处理令牌   #define TEST(a,b)CC_SP(CC_FIRST(a),CC_FIRST(b))(a,b)

     

预期标识符或'(''_Generic'之前'   #define CC_FIRST(a)_Generic((a),int:int8d)

     

粘贴“)”和“CC_FIRST”不提供有效的预处理令牌   #define TEST(a,b)CC_SP(CC_FIRST(a),CC_FIRST(b))(a,b)

     

'int8d'未声明(首次使用此功能)   #define CC_FIRST(a)_Generic((a),int:int8d)

     

预期';'在'_Generic'之前   #define CC_FIRST(a)_Generic((a),int:int8d)                               ^

我做错了什么?

1 个答案:

答案 0 :(得分:1)

_Generic根本不是您所期望的。特别是它不由预处理器评估。预处理器对类型一无所知,只知道文本标记。因此,连接前一部分的_Generic()永远不会有效,因为它们不会形成有效的令牌。