之間有區別嗎?
int main(){
return 0;
}
和
int main(){return 0;}
和
int main(){
return
0;
}
它們都可能編譯為相同的可執行檔案。C/C 編譯器如何處理額外的空格和換行符,以及換行符的處理方式與 C 代碼中的空格處理方式是否存在差異?
另外,標簽怎么樣?如果有的話,在代碼中使用制表符而不是空格有什么意義?
uj5u.com熱心網友回復:
任何 1 空格符號(空格/換行符/制表符/...)的序列等效于單個空格。
例外:
- 空格保留在字串文字中。它們不能包含換行符,C 原始文字 (
R"(...)")除外。這同樣適用于#include. - 單行注釋 (
//) 僅以換行符終止。 - 前處理器指令(以 開頭
#)僅以換行符終止。 \后跟換行符將洗掉兩者,允許多行//注釋、前處理器指令和字串文字。
此外,如果_左側和/或右側有標點符號(字母、數字和 之外的任何內容),則空白符號將被忽略。例如,1 2和1 2是相同的,但是return a;和returna;不是。
例外:
顯然,字串文字中的空格不會被忽略。也不在
#include檔案名中。由 >1 個標點符號組成的運算子不能被分隔,例如
cout < < 1是非法的。這同樣適用于//和 之類的東西/**/。標點之間的空格可能是必要的,以防止它合并為單個運算子。例子:
a不同于a.a b等價于a b,但不等于a b。- 在 C 11 之前,關閉一行中的兩個模板引數串列需要一個空格:
std::vector<std::vector<int> >.
定義類函式宏時,左括號前不允許有空格(加它就變成類物件宏)。例如,
#define A()取代A()一無所有,但#define A ()替換A用()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/400283.html
