當前位置:首頁 » 編程軟體 » c預編譯指令

c預編譯指令

發布時間: 2023-01-27 01:42:48

A. c語言程序,預編譯的作用是什麼

預編譯又稱為預處理 , 是做些代碼文本的替換工作。
處理 # 開頭的指令 ,
比如拷貝 #include 包含的文件代碼,
#define 宏定義的替換 , 條件編譯等,
就是為編譯做的預備工作的階段,主要處理#開始的預編譯指令,預編譯指令指示了在程序正式編譯前就由編譯器進行的操作,可以放在程序中的任何位置。
c 編譯系統在對程序進行通常的編譯之前,先進行預處理。 c 提供的預處理功能主要有以下三 種:
1)宏定義 #definemin(a,b)((a)>(b)?(b)::(a))
2 )文件包含 如:#include<stdio.h>
3 )條件編譯#ifndefGRAPHICS_H
#defineGRAPHICS_H
*****
#endif

#ifdefGRAPHICS_H
*****
#else
*****
#endif

B. c++預處理命令有什麼用

程序設計語言的預處理的概念:在編譯之前進行的處理。 C語言的預處理主要有三個方面的內容: 1.宏定義; 2.文件包含; 3.條件編譯。 預處理命令以符號「#」開頭。
1.不帶參數的宏定義:

宏定義又稱為宏代換、宏替換,簡稱「宏」。

格式:

#define標識符 字元串

其中的標識符就是所謂的符號常量,也稱為「宏名」。

預處理(預編譯)工作也叫做宏展開:將宏名替換為字元串。

掌握"宏"概念的關鍵是「換」。一切以換為前提、做任何事情之前先要換,准確理解之前就要「換」。

即在對相關命令或語句的含義和功能作具體分析之前就要換:

例:

#define PI 3.1415926

把程序中出現的PI全部換成3.1415926
2.帶參數的宏:

除了一般的字元串替換,還要做參數代換

格式:

#define 宏名(參數表) 字元串

例如:#define S(a,b) a*b

area=S(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2;
二. 文件包含一個文件包含另一個文件的內容

格式:

#include "文件名"



#include <文件名>

編譯時以包含處理以後的文件為編譯單位,被包含的文件是源文件的一部分。

編譯以後只得到一個目標文件.obj

被包含的文件又被稱為「標題文件」或「頭部文件」、「頭文件」,並且常用.h作擴展名。

修改頭文件後所有包含該文件的文件都要重新編譯

頭文件的內容除了函數原型和宏定義外,還可以有結構體定義,全局變數定義:

C. 用gcc編譯器C語言程序的技巧

方法/步驟
1、編寫c代碼,並輸入以下代碼,生成文件hello.c
[root@wahoo
test]#
vim
hello.c
#include
<stdio.h>
#define
DISPLAY
"hello
c!"
int
main(void)
{
printf("%s\n",
DISPLAY
);
return
0;
}
ZZ(說明:ZZ當前文件進行快速保存操作)
2、預編譯(Preprocessing)
會對各種預處理指令(#include
#define
#ifdef
等#開始的代碼行)進行處理,刪除注釋和多餘的空白字元,生成一份新的代碼
[root@wahoo
test]#gcc
-E
hello.c
-o
hello.i
E
參數
通知gcc對目標文件進行預編譯,這里是對文件hello.c文件
o
參數
是對命令輸出結果進行導入操作,這里是把
gcc
-E
hello.c
操作結果輸出到文件hello.i(命名要自定義)中進行保存
這個命令執行完後我們目錄下多了一個文件hello.i,你可以查閱一下文件的內容。
3、編譯(Compilation)
對代碼進行語法、語義分析和錯誤判斷,生成匯編代碼文件
[root@wahoo
test]#gcc
-S
hello.i
-o
hello.s
S
參數
通知gcc對目標文件進行編譯,這里是對文件hello.i文件
通過這一步我們知道
C語言跟匯編的
關系,至於他們之前是如何進行轉換的,大家可以進行更深入的學習與探討。
此時目錄下多了一個hello.s文件,內容如圖
4、匯編(Assembly)
把匯編代碼轉換與計算機可認識的二進制文件,要知道計算機只認識0和1呢
[root@wahoo
test]#gcc
-c
hello.s
-o
hello.o
c
參數
通知gcc對目標文件執行指令轉換操作
此步驟我們得到文件hello.o
大家也同樣打開文件查看一下,這個文件裡面幾乎沒幾個字元大家能看懂,這就對了,但大家可以通過這種方法將其轉化為我們可讀的形式:
[root@wahoo
test]#readelf
-a
hello.o
5、鏈接(Linking/Build)
通俗的講就是把多個*.o文件合並成一個可執行文件,二進制指令文件
[root@wahoo
test]#gcc
hello.o
-o
hello
這里我們就得到了一個可以直接在系統下執行的文件
hello
我們也可以對這個文件進行readelf操作,也可以進行二進制指令轉匯編的操作
[root@wahoo
test]#objmp
-d
hello
6、程序運行
[root@wahoo
test]#./hello
hello
c!
7、總結:gcc
編譯c程序的主要過程包括
預編譯->編譯->匯編->連接
四個過程,每個過程都分別進行不同的處理,了解了這其中的一些原理,對c編程的理解大有益處

D. 預處理指令只能位於C源程序文件的首部嗎 為什麼

是。

預處理命令是以「#」號開頭的命令,它們不是C語言的可執行命令,這些命令應該在函數之外書寫,一般在源文件的最前面書寫,稱為預處理部分。

在C編譯系統編譯源程序之前,先要對源程序中的預處理命令進行處理,處理完畢之後才能對源程序進行編譯。在全屏幕編輯環境下,預處理是在編譯之前自動由系統處理的。 因為大多數程序都用這個printf函數,而這個函數的頭文件是「stdio.h」,所以一般要包括上。

(4)c預編譯指令擴展閱讀:

預處理是C語言的一個重要功能,它由預處理程序負責完成。當對一個源文件進行編譯時,系統將自動引用預處理程序對源程序中的預處理部分作處理,處理完畢自動進入對源程序的編譯。

C語言提供多種預處理功能,主要處理#開始的預編譯指令,如宏定義(#define)、文件包含(#include)、條件編譯(#ifdef)等。合理使用預處理功能編寫的程序便於閱讀、修改、移植和調試,也有利於模塊化程序設計。

E. C/C++語言編譯生產可執行的二進制文件的過程求大神詳盡解釋,

  1. 預編譯。編譯器將你的.c、.cpp源代碼,通過解釋其中的預編譯指令,將源代碼轉換成相應的沒有任何預編譯指令的代碼。

  2. 編譯、優化。將上一步的代碼編譯成匯編指令,並作一定優化,形成對應的.s匯編代碼

  3. 匯編。將.s文件匯編成機器碼,形成對應的.o目標文件,此時是不可執行的二進制文件。生成對應的清單文件。為了連接需要,還會生成未定向符號表、導出符號表、地址重定向表等等。

  4. 連接。先根據對應的清單文件、連接文件及之間的調用關系,決定所有的目標文件及引用的庫文件在最後可執行文件中的位置;然後做一些其他事情,比如根據符號表等將目標文件中的符號地址補全等等;最終得到可執行文件。

這只是我個人的簡單理解,更詳盡的解答都可以寫成好幾本書了=_=望採納~

F. C語言:預編譯是什麼

預編譯,顧名思義,從字面上看,就是提前編譯,它做的是工作就是為正式編譯做准備
它說處理的是有#標識的代碼,如講include的文件進行拷貝、#define的條件編譯等等!關於預編譯的介紹你可以到網路里進行查看,裡面有詳細的介紹!http://ke..com/view/176610.htm

G. 什麼是預編譯 何時需要預編譯 mfc面試

預編譯又稱為預處理,是做些代碼文本的替換工作

預編譯又稱為預處理,是做些代碼文本的替換工作

處理#開頭的指令,比如拷貝#include包含的文件代碼,#define宏定義的替換,條件編譯等

就是為編譯做的預備工作的階段

主要處理#開始的預編譯指令

預編譯指令指示了在程序正式編譯前就由編譯器進行的操作,可以放在程序中的任何位置。常見的預編譯指令有:

(1)#include 指令

該指令指示編譯器將xxx.xxx文件的全部內容插入此處。若用<>括起文件則在系統的INCLUDE目錄中尋找文件,若用" "括起文件則在當前目錄中尋找文件。一般來說,該文件是後綴名為"h"或"cpp"的頭文件。

注意:<>不會在當前目錄下搜索頭文件,如果我們不用<>而用""把頭文件名擴起,其意義為在先在當前目錄下搜索頭文件,再在系統默認目錄下搜索。

(2)#define指令

該指令有三種用法:

第一種是定義標識,標識有效范圍為整個程序,形如#define XXX,常與#if配合使用;

第二種是定義常數,如#define max 100,則max代表100(這種情況下使用const定義常數更好,原因見注1);

第三種是定義"函數",如#define get_max(a, b) ((a)>(b)?(a):(b)) 則以後使用get_max(x,y)就可以得到x和y中較大的數(這種方法存在一些弊病,見注2)。

第四種是定義"宏函數",如#define GEN_FUN(type) type max_##type(type a,type b){return a>b?a:b;} ,使用時,用GEN_FUN(int),則此處預編譯後就變成了 max_int(int a,int b){return a>b?a:b;},以後就可以使用max_int(x,y)就可以得到x和y中較大的數.比第三種,增加了類型的說明。

(3)#if、#else和#endif指令

這些指令一般這樣配合使用:

#if defined(標識) //如果定義了標識

要執行的指令

#else

要執行的指令

#endif

在頭文件中為了避免重復調用(比如說兩個頭文件互相包含對方),常採用這樣的結構:

#if !(defined XXX) //XXX為一個在你的程序中唯一的標識符,

//每個頭文件的標識符都不應相同。

//起標識符的常見方法是若頭文件名為"abc.h"

//則標識為"abc_h"

#define XXX

真正的內容,如函數聲明之類

#endif

H. C/C++ 的預編譯原理是什麼為什麼要用預編譯

為了防止程序在實際應用當中出現錯誤

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:830
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1095
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:801
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:965
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:856
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1209
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:429
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:309
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:984
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:953