在C ++中,由语句生成的汇编代码有任何不同,例如:
var hRight = $('.right').height();
$('.left').height(hRight);
VS。
if (*expr*) { }
基本上我想知道的是,用括号分隔if语句是否与生成的底层代码相比,与简单的return语句有任何不同,如上所述。
答案 0 :(得分:2)
如果块内只有一个语句,则两者都是相同的。
if (e)
{
stmt;
}
if (e) stmt;
是一样的。但是,当您要执行多个语句时,必须将它们包装在{}
中。
答案 1 :(得分:1)
不,这两个例子没有区别。您可以使用分析器查看输出的汇编代码,并亲自查看。
答案 2 :(得分:0)
除return
声明外,没有任何区别。
如果表达式是编译时可评估的(例如sizeof
)或者没有副作用,编译器可以完全优化第一种情况。
同样,第二种情况可能会优化为简单的return;
答案 3 :(得分:0)
这个功能......
void f1(int e) {
if (e) {}
}
...编译成......
f1:
rep ret
......虽然这个功能......
void f2(int e) {
if (e) return;
}
...编译成......
f2:
rep ret
...使用-O2
选项启用优化时。
答案 4 :(得分:0)
如果只有一个陈述,那么使用“block”和“write inline”没有区别。
大括号仅用于包含一系列旨在被视为单个进程的语句。
if
的一般语法:
if ( condition_in_the_diamond )
statement_to_execute_if_condition_is_true;
因此,为了将多行代码作为单个进程,我们使用大括号。
因此,如果在if语句中只有一个语句要执行,那么它就会类似。
使用大括号更好,因为它可以减少出错的几率。假设您正在快速调试一行代码进行调试:
if(condition)
// statement1;
statement2; //this will bring statement2 in if clause which was not intended
或添加一行代码:
if(condition)
statement1;
statement3; // won't be included in if
statement2;
但是如果你使用内联语句:
if(condition) statement1;
然后它可能会阻止您从上面的错误,但它会使statement1
的长度有限(假设80个字符宽度代码)。这将使它看起来既简单又简单。
因此,除非您使用内联语句,否则建议使用大括号。
答案 5 :(得分:0)
编写糟糕的宏可能会发生令人讨厌的事情。
// c-style antipattern. Better use scoped_ptr
#define CLEANUPANDRETURN delete p; return
if (*expr*) CLEANUPANDRETURN;
// preprocesses to: (with added linebreaks)
if (*expr*)
delete p;
return;
C-Library的许多功能实际上可能是宏。看到 Why use apparently meaningless do-while and if-else statements in macros?以某种方式更安全的宏。