我正在学习未定义的行为,并在没有任何明确解释的情况下偶然发现了这段代码:
#include <stdio.h>
#include <limits.h>
int foo ( int x) {
printf ("% d\n" , x ); //2147483647
printf ("% d\n" , x+1 ); //-2147483648 overflow
return ( x+1 ) > x ; // 1 but How????
}
int main ( void ) {
printf ("% d\n" , INT_MAX ); //2147483647
printf ("% d\n" , INT_MAX+1 ); //-2147483648 overflow
printf ("% d\n" , ( INT_MAX+1 ) > INT_MAX ); //0 makes sense, since -ve < +ve
printf ("% d\n" , …Run Code Online (Sandbox Code Playgroud) 大多数情况下,我看到人们\n在字符串的末尾使用,但放在\n开头对我来说更有意义,因为现在我不必跟踪接下来要打印的内容。例如-
std::cout<<"Some string\n"; //syntax 1
Run Code Online (Sandbox Code Playgroud)
假设在此之后,控件转到其他一些我不需要换行的函数,但使用此语法强制插入换行,除非我可以提前考虑并跟踪下一行是否需要以换行打印.
std::cout<<"\nSome string"; //syntax 2
Run Code Online (Sandbox Code Playgroud)
但是通过使用第二种语法,我可以避免这样的事情,我只需要担心当前的语句。
问题 - 使用这两种语法中的任何一种只是个人偏好还是第二种语法比第一种语法有任何缺点?