【发布时间】:2016-12-07 15:50:41
【问题描述】:
有没有办法检测编译器(我有一个拥有它们的当前 GCC 和一个没有它们的老式 clang)是否实现语句表达式,以便我可以执行以下操作:
#ifdef NO_COMPOUND_STATEMENTS
#define MIN(a,b) ((a)<=(b) ? (a):(b))
#define MAX(a,b) ((a)>=(b) ? (a):(b))
#else
#define MIN(a,b) ({ __typeof__ (a) _a=(a); __typeof__ (b) _b=(b); _a<_b ? _a : _b; })
#define MAX(a,b) ({ __typeof__ (a) _a=(a); __typeof__ (b) _b=(b); _a>_b ? _a : _b; })
#endif
【问题讨论】:
-
嗯...“复合语句”? “复合语句”是该语言的一个基本特征,因此自古以来每个 C 编译器都是如此。没有像 C 编译器这样“没有复合语句”的东西。同时,您似乎在谈论语句表达式。
-
你能粘贴一个你的clang编译器不支持的例子吗?
-
您描述为“复合语句”的功能似乎真的是能够使用复合语句作为表达式。没有任何版本的标准 C 支持这一点;它是 GCC 扩展。可能其他实现也支持它,但没有任何标准方法专门针对它进行测试,因为它本身不是标准的。