繁体   English   中英

C _通用数组和char数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM