㈠ c語言 選擇題,選正確的,選好了給個說明
A)預處理命令行必須位於源文件的開頭
B)在源文件的一悉兄行上可以有多條預處理命令
C)宏名必須用大寫字母表示
D)宏替換不佔用程序的運行時間
答案:D
評析:通常,預處理命令位於源文件的開頭,也可以寫在函數與函數之間;不能在一行上寫多條預處理命令:宏名一般習慣用大寫字母表示,以便與變數名相區別,但這並非規定,也可睜判襲用小寫字母。
預處理命令是以#號開頭的代碼行,每一條預處理命令必須單獨佔用一行,由於不是C的語句,因此在結尾不能有分號「;」。
宏被定義後,其作用域一般為定義它的文件,通常#define命令寫在文件的開頭,但這也並非規定,實際上宏沖伏定義可以出現在程序的任何地方,但必須位於引用之前。
㈡ 常見的預處理命令有哪兩種
很多小夥伴在自己寫代碼的時候,已經多次使用過include命令。使用庫函數之前,應該用include引入對應的頭文件。其實這種以#號開頭的命令稱為預處理命令。
C語言源文件要經過編譯、鏈接才能生成可執行程序:
1) 編譯(Compile)會將源文件(.c文件)轉換為目標文件。對於 VC/VS,目標文件後綴為.obj;對於GCC,目標文件後綴為.o。
編譯是針對單個源文件的,一次編譯操作只能編譯一個源文件,如果程序中有多個源文件,就需要多次編譯操作。
2) 鏈接(Link)是針對多個文件的,它會將編譯生成的多個目標文件以及系統中的庫、組件等合並成一個可執行程序。
關於編譯和鏈接的過程、目標文件和可執行文件的結構、.h 文件和 .c 文件的區別,我們將在後期專題中講解。
在實際開發中,有時候在編譯之前還需要對源文件進行簡單的處理。例如,我們希望自己的程序在 Windows 和 Linux 下都能夠運行,那麼就要在 Windows 下使用 VS 編譯一遍,然後在 Linux 下使用 GCC 編譯一遍。但是現在有個問題,程序中要實現的某個功能在 VS 和 GCC 下使用的函數不同(假設 VS 下使用 a(),GCC 下使用 b()),VS 下的函數在 GCC 下不能編譯通過,GCC 下的函數在 VS 下也不能編譯通過,怎麼辦呢?
這就需要在編譯之前先對源文件進行處理:如果檢測到是 VS,就保留 a() 刪除 b();如果檢測到是 GCC,就保留 b() 刪除 a()。
這些在編譯之前對源文件進行簡單加工的過程,就稱為預處理(即預先處理、提前處理)。
預處理主要是處理以開頭的命令,例如include <stdio.h>等。預處理命令要放在所有函數之外,而且一般都放在源文件的前面。
預處理是C語言的一個重要功能,由預處理程序完成。當對一個源文件進行編譯時,系統將自動調用預處理程序對源程序中的預處理部分作處理,處理完畢自動進入對源程序的編譯。
編譯器會將預處理的結果保存到和源文件同名的.i文件中,例如 main.c 的預處理結果在 main.i 中。和.c一樣,.i也是文本文件,可以用編輯器打開直接查看內容。
C語言提供了多種預處理功能,如宏定義、文件包含、條件編譯等,合理地使用它們會使編寫的程序便於閱讀、修改、移植和調試,也有利於模塊化程
㈢ 什麼叫預處理命令
ANSI C標准規定, C源程序中可以加入一些預處理命令,以改進程序設計環境,提高編程效率.
預處理命令不是C語言本身的組成部分,所以在使用時以"#"開頭,以示和C語句的區別.
編譯程序在對源程序編譯之前首先對預處理命令進行處理(稱為預處理),將其替換成具有實際意義的內容,然後再進行編譯.
常用的預處理功能有:宏定義,文件包含,條件編譯.
具體例子http://www.sxuu.com/loveuu/Article/computer/dengji/erji/c2c/200508/3914.html
㈣ c語言中,以"#"開頭的控制行都是預處理命令嗎
對的。
預處理(或稱預編譯)是指在進行編譯的第一遍掃描(詞法掃描和語法分析)之前所作的工作。預處理指令指示在程序正式編譯前就由編譯器進行的操作,可放在程序中任何位置。
預處理是C語言的一個重要功能,它由預處理程序負責完成。當對一個源文件進行編譯時,系統將自動引用預處理程序對源程序中的預處理部分作處理,處理完畢自動進入對源程序的編譯。
C語言提供多種預處理功能,主要處理#開始的預編譯指令,如宏定義(#define)、文件包含(#include)、條件編譯(#ifdef)等。合理使用預處理功能編寫的程序便於閱讀、修改、移植和調試,也有利於模塊化程序設計。
㈤ 為什麼A是對的,預處理命令行都必須以#號開始 才是對的把
因為如果代碼是注釋它就不起作用了。
如/*注釋#define。
B、預處理命令行不可以 宏定義是可以的。
C、程序在執行過程中對預處理命令行進行處理。是在執行過程之前,所以才稱為預處理,就是先於程序處理的意思,這是對的。
宏定義又稱為宏代換、宏替換,簡稱「宏」。格式:#define標識符文本,其中的標識符就是所謂的符號常量,也稱為「宏名」。
D、對預處理命令行的處理是在編譯之前完成的,不是程序執行的過程中,選D。
正確的宏定義是#define S(r) ((r)*(r))
(2)宏名和參數的括弧間不能有空格
(3)宏替換只作替換,不做計算,不做表達式求解
(4)函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存
(5)宏的啞實結合不存在類型,也沒有類型轉換。
(6)宏展開使源程序變長,函數調用不會
(7)宏展開不佔運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)。