是否可以在三元运算符中包含语句(在生成的代码中)?

时间:2019-05-16 05:09:04

标签: c expression ternary-operator

免责声明:我不是在写这样的代码,我知道它很丑陋而且不可读。

我正在生成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语言不可能实现吗?

2 个答案:

答案 0 :(得分:4)

使用gcc extension,您可以将大括号中的语句括起来,例如

int a  = (true) ? ( (true) ? (puts("a"), puts("b"), ({if (true) puts("c");}),  1) : (2) ) : (3);

答案 1 :(得分:3)

不能在表达式中包含语句,不可以。但是,正如您指出的,您可以具有布尔运算符和三元运算符。

if (true) puts("c");

可以用类似

的表达式编写
true ? puts("c") : false

true && puts("c")