例如:
typedef struct S { int i; char c; } S;
#define MAKE_CLITERAL(T) ((typeof(T)) {T})
int main()
{
S s = {.i = 500, .c = 'a'};
S s2 = MAKE_CLITERAL(s); // doesn't compile
}
我希望宏MAKE_CLITERAL
将任何值转换为复合文字。
这样,做类似MAKE_CLITERAL( 10 )
和MAKE_CLITERAL( s )
的事情都会生成其类型的复合文字。
我尝试这样做:
#define MAKE_CLITERAL(T) ( (typeof(T)){} = T );
但它的行为并不完全像复合文字,所以这是行不通的:
&MAKE_CLITERAL(s); // compiler says this is an rvalue
有没有办法使用相同类型的值来初始化复合文字?
您可以将对象包装到在复合文字中创建的未标记结构类型中。