Gre*_*ers 5 c conditional-operator string-literals
以下代码在 C 语言中有效/良好实践吗?
int x = 1;
printf(x == 1 ? "%d second elapsed" : "%d seconds elapsed", x);
Run Code Online (Sandbox Code Playgroud)
它编译得很好,所以我认为它很好(也因为它只是 if-else 块的语法糖),但如果有人有一些额外的见解,我将不胜感激,谢谢。
PS,我想 C++ 也是如此?
是的!
固执己见:在阅读了由编写内核、驱动程序和杂项的程序员编写的大量代码之后。通常被认为“好”的实用程序,我认为共识是“很好”。它不仅安全,而且易于阅读。
一个小的、不带偏见的注释:编译器可以使字符串文字重叠。如果你有两个字符串文字,"Hello world"并且"world"编译你的程序将完全优化,你可能会发现指向'w'in 的指针"world"实际上在"Hello world"字符串文字内,因为它们都是有效的、以 null 结尾的字符串。例子:
ptr1
|
V
hello world\0
^
|
ptr2
Run Code Online (Sandbox Code Playgroud)
但是,该优化不能应用于像您这样的字符串,因为不同的部分位于字符串文字的中间。
因此我建议:
printf("%d second%s elapsed", x, x == 1 ? "" : "s");
Run Code Online (Sandbox Code Playgroud)
我的另一个观点是,这样做也更容易阅读。