【问题标题】:Is it possible to have statements inside a ternary operator (in generated code)?是否可以在三元运算符中包含语句(在生成的代码中)?
【发布时间】:2019-05-16 05:09:03
【问题描述】:

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

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

【问题讨论】:

  • 发布您的实际代码会更好,也许有no need 可以使用 gnu 扩展。
  • 您可以使用三元表达式而不是 if 语句。

标签: c expression ternary-operator


【解决方案1】:

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

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

【讨论】:

  • C 语言的灵活性真是令人惊叹。非常适合代码生成。
  • 这是一个 GCC 扩展
  • Clang 支持一些 gcc 扩展
  • @Alex 毕竟我是对的 ;p 使用 -pedantic -Werror 编译 ...
  • 只是想知道,谁在这里删除了近一半的 cmets?为什么?
【解决方案2】:

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

if (true) puts("c");

可以写成这样的表达式

true ? puts("c") : false

true && puts("c")

【讨论】:

  • 谢谢。循环可以写成表达式吗?
  • @Alex Nitpick: if 是一个条件,而不是一个循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 2021-10-06
  • 2017-10-17
  • 2015-10-13
  • 2016-10-04
  • 2015-08-04
  • 2016-04-25
相关资源
最近更新 更多