使用_Generic
C11 中的特性,你如何处理字符串字面量?
例如:
#include <stdio.h>
#define foo(x) _Generic((x), char *: puts(x))
int main()
{
foo("Hello, world!");
return 0;
}
在 clang 上给出这个错误:
controlling expression type 'char [14]' not compatible with any generic association type
替换char *
给char[]
我
error: type 'char []' in generic association incomplete
编译它的唯一方法(据我所知)是:
- 将字符串文字转换为适当的类型。这很丑陋,并且(在我看来)
_Generic
首先打败了这一点。 - 用作
char[14]
类型说明符。你一定是在开玩笑吧……
我的假设是数组在传递给时会衰减为指针_Generic
,但显然不是。那么,如何使用字符串_Generic
文字呢?只有这两个选项吗?
我在 Debian 上使用clang 3.2。不幸的是,它是我可以访问的唯一支持此功能的编译器,所以我无法判断它是否是编译器错误。