我想在 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) ^
我做错了什么?
答案 0 :(得分:1)
_Generic
根本不是您所期望的。特别是它不由预处理器评估。预处理器对类型一无所知,只知道文本标记。因此,连接前一部分的_Generic
和()
永远不会有效,因为它们不会形成有效的令牌。