我有一个通用表达式(在宏中):
int equal = _Generic(
(actual),
unsigned long: actual == expected,
int: actual == expected,
unsigned char: actual == expected,
char *: strcmp((char *)actual, (char *)expected) == 0
);
Run Code Online (Sandbox Code Playgroud)
当我actual使用char [12] 扩展它时它适用于某些体系结构/编译器,但在某些我得到错误:
error: controlling expression type 'char [12]' not compatible with any generic association type
Run Code Online (Sandbox Code Playgroud)
如何在不为每个char数组长度写一行的情况下处理这个问题?即char[0],char[1],char[2]...
强制char数组衰减成指针可以解决问题,但我无法将此宏更改为函数.有没有办法强迫腐烂?我试过了*&actual,但它没有导致char *.
这个问题是由于引入的C11文本中存在歧义_Generic.它现在由委员会解决,因为期望执行数组到指针的转换以确定匹配类型.
目前,您可以通过actual在执行此转换的表达式中使用您来解决此问题.我建议
bool equal = _Generic(
(actual)+0,
default: actual == expected,
char *: strcmp((char *)actual, (char *)expected) == 0
);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你的代码不是完全类型保存,因为它不检查类型expected.我试着让第二个_Generic确保这一点.
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |