以下代码在C中是有效的/良好的实践吗?
int x = 1;
printf(x == 1 ? "%d second elapsed" : "%d seconds elapsed", x);
它编译得很好,所以我认为它很好(也因为它只是if-Else块的语法糖),但如果有人有更多的见解,我将不胜感激,谢谢.
另外,我想C++也是这样吧?
以下代码在C中是有效的/良好的实践吗?
int x = 1;
printf(x == 1 ? "%d second elapsed" : "%d seconds elapsed", x);
它编译得很好,所以我认为它很好(也因为它只是if-Else块的语法糖),但如果有人有更多的见解,我将不胜感激,谢谢.
另外,我想C++也是这样吧?
是!
固执己见:在费力阅读了由编写内核、驱动程序和杂项的程序员编写的大量代码之后.那些通常被认为是"好的"的公用事业项目,我想大家的共识是"很好".它不仅是安全的,而且还可以很容易地阅读.
一个小的,非固执己见的注意:允许编译器使字符串重叠.如果您有两个字符串文字,"Hello world"
和"world"
,并且编译您的程序将完全优化,您可能会发现"world"
中指向'w'
的指针实际上在"Hello world"
字符串文字范围内,因为它们都是有效的、以空结尾的字符串.
但是,这种优化不能应用于像您这样的字符串,因为不同的部分位于字符串文字的前middle位.
这意味着编译器必须为三元运算符存储两个完整的字符串,这并不比使用if
语句更好.
因此,我建议:
printf("%d second%s elapsed", x, x == 1 ? "" : "s");
我的另一个观点是,这样做也会让它更容易阅读.