今天開始自學C語言, 其實早就接觸過一些C語言的編程知識,但是一直以來發現自己的語言功底不夠紮實,因此想要從新好好學習學習C語言。
首先進行一個測試:
Exp_1:
#include <stdio.h>
int main(int argc,char *argv[])
{
printf("Hello word
");
getch();
}
看到這個地方,不知道大家認為這個程式有什麼異常沒有, 從我曾經學習過的C語言書籍來看,我得到的知識點是這樣的: 在C語言的編譯過程中,空格是不被編譯的,就是說如果我們在C語言的程式碼中插入一個、兩個或者三個,甚至更多的空格,其編譯結果是一樣的。
例如:
Exp2: 定義函數變數
int iAge; //一個空格
int iAge; // 多個空格
很顯然上面的兩個定義整型資料的C語句具有一致的效果。
Exp3: 賦值和運算語句
iAge = 100 ; // 賦值運算子的左值和右值之間一個空格
iAge=100; //賦值運算子的左值和右值之間沒有空格
iAge+=100; // 加法運算之間沒有空格
iAge += 100; //加法運算之間有空格
很顯然這些語言也都成立。
是否就是說: 在C語言編譯器裡面空格是可以被忽略的呢?
雖然上面例舉的執行個體都證明在某些情況下C的編譯器會忽略空格,但是不能代表在所有的地方一個空格和兩個空格就是一樣的。
如果在WinTC上編譯或者在Turbo C上編譯,可以發現前面的Exp1是不能被編譯通過的:
會報: 沒有結束引號的字串 ——》 printf("Hello word
這就證明在C語言中空格也不是隨便就可以加的。
那麼什麼時候空格不能被忽略呢?
下面簡單的總結幾項, 都是一孔之見,歡迎各位彎腰找板磚..............................
1、 C標準裡面規定的組成關鍵字的字元間不能出現空格,例如:
int 不能寫出 i nt
2、 定義使用者自訂標識符時,組成標識符的字元間不能有空格,例如:
int iAge; 不能寫成 int i Age;
3、 C語言定義的多字元組成的運算子之間不能有空格,例如:
iAge+=100; 這個地方的 +=之間就不能有空格, 這個現象僅限於兩字元或者三字元的運算子。當然 ? : 這個運算子除外。
4、 在編輯C原始碼時,使用者定義的字串字面值,就是通常說的字串常量的後引號之間,不能出現斷行符號帶來的空格。例如:
“Hello word ”;
不能寫成:“Hello word
”;
在第四種情況下可以利用 “ \ ” 符號來消除編輯期間斷行符號帶來的副作用。
例如: “Hello Word” ;就可以定義為
"Hello word \
"
*** 重點介紹一下 反斜線 " \ "
我們知道當我們一行寫不下一個C語言語句時, 我們可以使用續行符 "\" 來續行,但是我們依然可以在一行可以寫下代碼時使用它。如:
Exp4:
printf("Hello Word\! ");
這裡會輸出什麼呢? 一般我們學習是得到的教育是:printf裡面的第一個字串參數原樣輸出,即會輸出: Hello Word\!
但是實際輸出卻不是上面描述的,而是:
Hello Word!
就是說在C語言編譯器裡面, 當我們使用單獨的一個 "\" 時他就是一個續行符, 哪怕這個續行是在一行也是一樣。 (當存在逸出序列時除外)。