国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

c /c++復(fù)習(xí)筆記 第一天

2019-11-09 19:30:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

基礎(chǔ)知識(shí)回歸總結(jié)整理GNU編譯工具GCC支持多種編程語(yǔ)言支持多種平臺(tái)構(gòu)建Build過(guò)程查看版本文件后綴編譯單個(gè)源程序編譯多個(gè)源程序預(yù)處理指令頭文件的三種定位方式

基礎(chǔ)知識(shí)回歸、總結(jié)、整理

GNU編譯工具GCC


1. 支持多種編程語(yǔ)言

~~~~~~~~~~~~~~~

C、C++、Objective-C、java、Fortran、Pascal、Ada

2. 支持多種平臺(tái)

~~~~~~~~~~~

Unix、linux、Windows。

3. 構(gòu)建(Build)過(guò)程

~~~~~~~~~~~~~~

編輯 -> 預(yù)編譯 -> 編譯 -> 匯編 -> 鏈接

1) 編輯: vi hello.c -> hello.c 2) 預(yù)編譯:gcc -E hello.c -o hello.i -> hello.i -+ 3) 編譯: gcc -S hello.i -> hello.s | GCC 4) 匯編: gcc -c hello.s -> hello.o | 工具鏈 5) 鏈接: gcc hello.o -o hello -> hello -+

范例:hello.c

4. 查看版本

~~~~~~~

gcc -v

5. 文件后綴

~~~~~~~

.h - C語(yǔ)言源代碼頭文件 .c - 預(yù)處理前的C語(yǔ)言源代碼文件 .i - 預(yù)處理后的C語(yǔ)言源代碼文件 .s - 匯編語(yǔ)言文件 .o - 目標(biāo)文件 .a - 靜態(tài)庫(kù)文件 .so - 共享庫(kù)(動(dòng)態(tài)庫(kù))文件

6. 編譯單個(gè)源程序

~~~~~~~~~~~~~

gcc [選項(xiàng)參數(shù)] 文件

-c - 只編譯不鏈接。 -o - 指定輸出文件。 -E - 預(yù)編譯。 -S - 產(chǎn)生匯編文件。 -pedantic - 對(duì)不符合ANSI/ISO C語(yǔ)言標(biāo)準(zhǔn)的 擴(kuò)展語(yǔ)法產(chǎn)生警告。 -Wall - 產(chǎn)生盡可能多的警告。 范例:gcc -Wall wall.c -Werror - 將警告作為錯(cuò)誤處理。 范例:gcc -Werror werror.c -x - 指定源代碼的語(yǔ)言。 范例:gcc -x c++ cpp.c -lstdc++ -g - 生成調(diào)試信息。 -O1/O2/O3 - 優(yōu)化等級(jí)。

7. 編譯多個(gè)源程序

~~~~~~~~~~~~~

gcc [選項(xiàng)參數(shù)] 文件1 文件2 …

思考:頭文件的作用是什么?

1) 聲明外部變量、函數(shù)和類。 2) 定義宏、類型別名和自定義類型。 3) 包含其它頭文件。 4) 借助頭文件衛(wèi)士,防止因同一個(gè)頭文件被多次包含, 而引發(fā)重定義錯(cuò)。

包含頭文件時(shí)需要注意:

1) gcc的-I選項(xiàng)

指定頭文件附加搜索路徑。

2) #include <…>

先找-I指定的目錄,再找系統(tǒng)目錄。

3) #include “…”

先找-I指定的目錄,再找當(dāng)前目錄,最后找系統(tǒng)目錄。

4) 頭文件的系統(tǒng)目錄

/usr/include /usr/local/include /usr/lib/gcc/i686-linux-gnu/4.6.3/include /usr/include/c++/4.6.3 (C++編譯器優(yōu)先查找此目錄)

8. 預(yù)處理指令

~~~~~~~~~

#include // 將指定文件的內(nèi)容插至此指令處#include_next // 與#include一樣, // 但從當(dāng)前目錄之后的目錄查找,極少用#define // 定義宏#undef // 刪除宏#if // 判定#ifdef // 判定宏是否已定義#ifndef // 判定宏是否未定義#else // 與#if、#ifdef、#ifndef結(jié)合使用#elif // else if多選分支#endif // 結(jié)束判定## // 連接宏內(nèi)兩個(gè)連續(xù)的字符串# // 將宏參數(shù)擴(kuò)展成字符串字面值#error // 產(chǎn)生錯(cuò)誤,結(jié)束預(yù)處理#warning // 產(chǎn)生警告預(yù)定義宏 ~~~~~~~__BASE_FILE__ // 正在編譯的源文件名__FILE__ // 所在文件名__LINE__ // 行號(hào)__FUNCTION__ // 函數(shù)名__func__ // 同__FUNCTION____DATE__ // 日期__TIME__ // 時(shí)間__INCLUDE_LEVEL__ // 包含層數(shù),從0開(kāi)始__cplusplus // C++編譯器將其定義為1, // C編譯器不定義該宏# gcc PRedef.c__BASE_FILE__ : predef.c__FILE__ : print.h__LINE__ : 9__FUNCTION__ : print__func__ : print__DATE__ : May 25 2013__TIME__ : 07:31:39__INCLUDE_LEVEL__ : 2# g++ predef.c__BASE_FILE__ : predef.c__FILE__ : print.h__LINE__ : 9__FUNCTION__ : print__func__ : print__DATE__ : May 25 2013__TIME__ : 07:32:33__INCLUDE_LEVEL__ : 2__cplusplus : 1環(huán)境變量 ~~~~~~~~

C_INCLUDE_PATH - C頭文件的附加搜索路徑, 相當(dāng)于gcc的-I選項(xiàng)。 CPATH - 同C_INCLUDE_PATH。 CPLUS_INCLUDE_PATH - C++頭文件的附加搜索路徑。 LIBRARY_PATH - 鏈接時(shí)查找靜態(tài)庫(kù)/共享庫(kù)的路徑。 LD_LIBRARY_PATH - 運(yùn)行時(shí)查找共享庫(kù)的路徑。

通過(guò)gcc的-I選項(xiàng)指定C/C++頭文件的附加搜索路徑:

# gcc calc.c cpath.c -I.

將當(dāng)前目錄作為C頭文件附加搜索路徑, 添加到CPATH環(huán)境變量中:

# export CPATH=$CPATH:. // export保證當(dāng)前shell的 // 子進(jìn)程繼承此環(huán)境變量# echo $CPATH# env | grep CPATH

也可以在~/.bashrc或~/.bash_profile 配置文件中寫環(huán)境變量,持久有效:

export CPATH=$CPATH:.執(zhí)行# source ~/.bashrc或# source ~/.bash_profile生效。以后每次登錄自動(dòng)生效。

頭文件的三種定位方式:

1) #include “目錄/xxx.h” - 頭文件路徑發(fā)生變化, 需要修改源程序。 2) C_INCLUDE_PATH/CPATH=目錄 - 同時(shí)構(gòu)建多個(gè)工程, 可能引發(fā)沖突。 3) gcc -I目錄 - 既不用改程序, 也不會(huì)有沖突。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 辽中县| 曲水县| 禹城市| 龙门县| 西盟| 长葛市| 甘德县| 衡水市| 阿克苏市| 沽源县| 祥云县| 深圳市| 晴隆县| 罗甸县| 大新县| 南汇区| 鄂伦春自治旗| 德格县| 寿宁县| 盐亭县| 阳城县| 方城县| 宕昌县| 福鼎市| 禹州市| 郯城县| 株洲市| 衡阳县| 鄂托克旗| 桦南县| 民权县| 榆社县| 林口县| 新河县| 定日县| 友谊县| 大埔县| 青岛市| 东阿县| 兴安盟| 锡林郭勒盟|