c語言的基本知識?1,“\”引起的錯誤:在我們現在的編譯器中如果寫下面這段程序,下面我們就來聊聊關于c語言的基本知識?接下來我們就一起去了解一下吧!
1,“\”引起的錯誤:
在我們現在的編譯器中如果寫下面這段程序
int main() { // create file in c:\ ofstream outupt("test.txt"); }
編譯就會用字符的顔色來提示我們,這兩行内容都被當做了注釋的内容,但是如果在vim下編寫程序,就不會出現代碼顔色不一樣的問題,導緻程序出錯,是什麼原因呢,是因為"\"的問題,它在c 或者python語言中,代表的含義都是本行尚未結束,下一行仍和本行是一個整體,所以編譯器會認為,兩行都是注釋,最終導緻錯誤。
2, 想想這個表達式: y = x/*p 他的結果是什麼呢? 有可能是x的值除以*p的值的結果賦給y,但是在實際編譯中會出錯,為什麼? 因為編譯器會把 /*當成注釋的開始,之後的内容都是注釋,但是要結束注釋需要找到匹配的*/,但是沒有找到,所以編譯會出錯。如果向改正程序的話,在/, * 之間加一個空格,或者給他們加一個(),就解決了。
3, #define PCHAR char*
PCHAR p1, p2;
typedef char* pchar;
pchar p3, p4;
那sizeof p1, p2, p3, p4都是什麼呢,結果是4, 1, 4, 4,結果很奇怪吧,原因要追溯到編譯器對#define的處理,是對#define定義的東西在預編譯的時候進行替換,也就是說真正編譯的時候是這個樣子 char * p1, p2;這樣該明白p2的值是1的原因了吧。
4,enum enum_value {
VALUE_ONE,
VALUE_TWO,
VALUE_THREE,
}enum_val;
測試一下sizeof enum_val的值,看是多少,你會發現是4,其實這個原因很簡單,enum 定義的變量隻是一個UINT類型,而它生命的VALUE_ONE,VALUE_TWO, 隻是enum變量的取值範圍而已,所以enum不是像struct那樣是個結構體,它表示的隻是一個集合。
5, #define,因為在預編譯的時候就會做替換,所以他不會導緻不必要的内存分配。同時宏看起來像一個函數,但不會招緻函數調用不必要的開銷。
在定義宏的時候,必須記住為所以得實參加上小括号,但即使加上了小括号,也會遭遇麻煩:
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
看看下面的調用:
int a = 5, b = 10
CALL_WITH_MAX( a, b)
CALL_WITH_MAX( a, b 10) 把實參替換一下就可以看到,a的遞增次數取決于它被拿來和誰比較。
6, int a[6], sizeof(a[6]) 為什麼不會出錯? 因為sizeof 是一個關鍵字,關鍵字求值是在編譯的時候,雖然并不存在a[100]這個元素,但是這裡并沒有真正的去訪問a[6], 而是僅僅根據數據元素的類型确定其值。 那麼函數引用a[6]就會出錯,是因為函數求值是在運行的時候。
獲取方式:
1.在你手機的右上角有【關注】選項,或點擊我的頭像,點擊關注!(關注我)
2.關注後,手機客戶端點擊我的主頁面,右上角有私信,請私信發我:編程
電腦已經設置好了關鍵詞自動回複,自動領取就好了!這幾天上萬個消息,真的回複不過來,所以回複的時候請注意關鍵詞!
其實做為一個開發者,有一個學習的氛圍跟一個交流圈子特别重要這裡請私信我“編程”不管你是小白還是大牛歡迎入住大家一起交流成長。小編會在裡面不定期分享幹貨源碼,包括我精心整理的一份c 零基礎教程。歡迎各位感興趣的的小夥伴。
學習思路:
學習資料:
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!