是否可以在三元运算符中包含语句(在生成的代码中)?
Is it possible to have statements inside a ternary operator (in generated code)?
免责声明:我不是在写这样的代码,我知道它丑陋且不可读。
我正在生成 C,我需要所有内容都在一个表达式中。
这个有效:
#define true 1
int a = (true) ? ( (true) ? (puts("a"), puts("b"), 1) : (2) ) : (3);
printf("%d\n", a);
a
b
1
但我还需要语句,而不仅仅是表达式。编译失败:
int a = (true) ? ( (true) ? (puts("a"), puts("b"), (if (true) puts("c");), 1) : (2) ) : (3);
error: expected expression
用C实现不了吗?
表达式中不能有语句,不行。但是,如您所述,您可以使用布尔运算符和三元运算符。
if (true) puts("c");
可以写成
这样的表达式
true ? puts("c") : false
或
true && puts("c")
使用 gcc extension,您可以将语句括在大括号中,例如
int a = (true) ? ( (true) ? (puts("a"), puts("b"), ({if (true) puts("c");}), 1) : (2) ) : (3);
免责声明:我不是在写这样的代码,我知道它丑陋且不可读。
我正在生成 C,我需要所有内容都在一个表达式中。
这个有效:
#define true 1
int a = (true) ? ( (true) ? (puts("a"), puts("b"), 1) : (2) ) : (3);
printf("%d\n", a);
a
b
1
但我还需要语句,而不仅仅是表达式。编译失败:
int a = (true) ? ( (true) ? (puts("a"), puts("b"), (if (true) puts("c");), 1) : (2) ) : (3);
error: expected expression
用C实现不了吗?
表达式中不能有语句,不行。但是,如您所述,您可以使用布尔运算符和三元运算符。
if (true) puts("c");
可以写成
这样的表达式true ? puts("c") : false
或
true && puts("c")
使用 gcc extension,您可以将语句括在大括号中,例如
int a = (true) ? ( (true) ? (puts("a"), puts("b"), ({if (true) puts("c");}), 1) : (2) ) : (3);