自己對C不太瞭解,導致寫程序的時候遇到很多問題,對於熟悉C的人來說,這可能不值一提。但是爲了自己能有能夠更好地理解,還是做下筆記。
一、關於DEVc++使用技巧
頭文件引入:
#include <iostream>
#include是標準的C++頭文件,任何符合標準的C++開發環境都有這個頭文件。
作爲iostream(.h)庫的一部分,頭文件<iostream(.h)>聲明瞭一些用來在標準輸入輸出設備上進行輸入輸出操作的對象。using namespace std;
在舊的標準C++中,使用#include<iostream.h>,但在新標準中,用#include,而且在VC中編程的同時要注意要添加命名空間(std):using namespace std;
頭文件包含了以下對象:
窄字符(char)
- cin:標準輸入流
- cout:標準輸出流
- cerr:錯誤的標準輸出流
- clog:用於記錄的標準輸出流
寬字符(wchar_t)
- wcin:標準輸入流(寬)
- wcout:標準輸出流(寬)
- wcerr:錯誤的標準輸出流(面向廣角)
- wclog:用於記錄的標準輸出流(寬)
DEVc++的坑
DEVc++感覺界面挺好看,代碼有不同的高亮,更加清晰明瞭。但是好像錯誤提示有點弱,今天我在寫一個判斷應該寫 == 結果粗心寫成了 = ,但並沒報錯,然後運行的結果一直不對,看了半天才排查出來。哎,可能還是自己菜。不知道VC6.0有沒有這樣的報錯提示。
[Error] ‘:main’ must return "int’
再devcpp上運行,報錯信息[Error] ‘:main’ must return “int”,查了資料後,網上有人說:
main函數必須返回int類型。這個要求是C99提出的,所以採用C99及以後標準的編譯器,都會強制要求main函數返回int類型。即這樣:
int main()
{
...
return 0;
}
而現在很多書都不注意規範,用着老編譯器,這種事情毫不在意,寫成main()
和void main()
的屢見不鮮,這個需要個人注意,嚴格按照標準來。
二、C中的定義
-
問題一:
typedef int SElemType;
爲什麼要這樣定義?
定義不同的數據類型名稱是爲了程序的可讀性。一旦你需要將類型變換比如使用double型的,只要寫:
typedef double ElemType;如果沒有定義的話就要一個個的把int改成double,這樣操作起來會很麻煩。 -
問題二:
#define STACKINCREMENT 10
什麼意思?
#define是C語言中的一個預處理指令,其中的“#”表示這是一條預處理命令·。表示定義一個常量STACKINCREMENT
,而且一定不要加;
分號,要不然程序報錯。其定義的一般形式爲:#define 標識符 字符串
-
問題三:typedef相關的是啥?
typedef struct{ //棧結構類型定義(棧頂指針、棧低指針、棧大小)
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
typedef
是類型定義的意思。typedef struc
t 是爲了使用這個結構體方便。具體區別在於:
若struct node{ }這樣來定義結構體的話。在定義 node 的結構體變量時,需要這樣寫:struct node n;
若用typedef,可以這樣寫:typedef struct node{}NODE; 。在申請變量時就可以這樣寫:NODE n;
其實就相當於 NODE 是node 的別名。區別就在於使用時,是否可以省去struct這個關鍵字。