[英]C _Generic and char arrays
我有一个通用表达式(在宏中):
int equal = _Generic(
(actual),
unsigned long: actual == expected,
int: actual == expected,
unsigned char: actual == expected,
char *: strcmp((char *)actual, (char *)expected) == 0
);
当我将其actual
扩展为char [12]时,它可以在某些体系结构/编译器上工作,但在某些情况下会出现错误:
error: controlling expression type 'char [12]' not compatible with any generic association type
如何在不为char数组的每个长度写一行的情况下处理此问题? 即char[0]
, char[1]
, char[2]
...
强制将char数组衰减为指针可以解决问题,但是我无法将此宏更改为函数。 有办法强迫衰变吗? 我已经尝试过*&actual
,但是它不会导致char *
。
此问题是由于引入_Generic
的C11文本中存在歧义。 委员会现在解决的问题是,期望执行数组到指针的转换以确定匹配类型。
暂时可以解决此通过使用您的actual
在做这个转换的表达式。 我建议
bool equal = _Generic(
(actual)+0,
default: actual == expected,
char *: strcmp((char *)actual, (char *)expected) == 0
);
顺便说一句,你的代码没有完全键入保存,因为它不检查类型的expected
。 我会尝试使用第二个_Generic
来确保这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.