哪个更有效
if(!var_name)
或
if(var_name == NULL)
答案 0 :(得分:16)
两者都将编译为相同的代码。您选择使用哪个应该取决于哪个最具可读性。
此版本:
if(var_name == NULL)
当var_name
是指针时,应该仅,否则您将会混淆将来读取您的代码的任何人。如果你在非指针上使用它,一些编译器可能会抱怨。
这一个:
if(!var_name)
当您在逻辑上将var_name
视为布尔(true / false)值时,应使用。这可以包括var_name
是一个指针,因为NULL
是“false”或未定义指针的值。
如果var_name
是一个整数,那么我会选择第三个选项:
if(var_name == 0)
因为我发现它更清楚地表达了意图。
答案 1 :(得分:7)
没关系。无论您使用什么编译器,两者都将非常高效,并且对于大多数编译器将编译为完全相同的代码。如果这是您真正关心的问题,请查看特定编译器发出的程序集/机器代码。
答案 2 :(得分:5)
没关系。
更改此设置为micro optimisation,并且不太可能改变应用的性能(除非您已经检查过这是瓶颈)。 除此之外,我敢打赌编译器会将此语句更改为最佳语句(如果它很重要),所以我会使用您喜欢的语法。
答案 3 :(得分:1)
第一个。它缩短了7个字符。
答案 4 :(得分:0)
如果var_name是一个指针而你正在编译某个带有糟糕的非优化编译器的嵌入式系统,var_name == NULL
会更快,因为强制转换为布尔后跟否定后跟比较为true将是比普通价值比较慢。在大约每一个其他编译器的情况下,他们将被优化到相同的代码。
答案 5 :(得分:0)
如果'var'属于UDT,那么选择使用哪个将更多地由该类提供的这些运算符而非效率引导(我相信上面的大多数响应都会回答)
答案 6 :(得分:0)
两者在效率方面都是等价的,但后来更易于阅读,这在编码中也起着至关重要的作用。
答案 7 :(得分:-1)
我不会使用为性能敏感的东西生成不同代码的编译器。