① 在C++語言中,包含頭文件的預處理命令以什麼開頭
預處理指令
總是佔用源代碼中的單獨一行,並且
總是以
#
字元和預處理指令名稱開頭
。#
字元的前面以及
#
字元與指令名稱之間可以出現空白符。
包含
#define
、
#undef
、#if、#elif、#else、
#endif
或
#line
指令的源代碼行可以用
單行注釋
結束。在包含預處理指令的源行上不允許使用帶
分隔符
的注釋(/*
*/
樣式的注釋)。
預處理指令既不是標記,也不是
C#
句法文法的組成部分。但是,可以用預處理指令包含或排除標記序列,並且可以以這種方式影響
C#
程序的含義。
② C++中預處理指令是什麼
C++中,預處理命令是以#號開頭,結尾沒有分號的命令行。這些命令會在編譯開始前由編譯器執行。有三種預處理命令:
1. 宏定義;
2. 文件包含;
3. 條件編譯。
宏定義命令格式為:
#define 標識符 替換文本
其中"標識符"稱為宏名,替換文本可以是任意的字元串。執行宏替換時編譯器將全部的宏名替換為替換文本。
文件包含命令格式為:
#include <文件名> 或#include "文件名"
文件名用尖括弧或雙引號括起來都是合法的。一般預設頭文件用尖括弧,自定義頭文件用雙引號。原因:用雙引號會先在當前目錄下查找。
條件編譯命令有很多種格式,這里只列出並解釋其中兩種:
格式1:
#ifdef 標識符
程序段1
#else
程序段2
#endif
它的意思是:如果標識符已經被宏定義,則編譯程序段1,否則編譯程序段2。
格式2:
#ifndef 標識符
程序段1
#else
程序段2
#endif
它的意思是:如果標識符沒有被宏定義,則編譯程序段1,否則編譯程序段2。
③ c語言中預處理命令都有哪些
C語言的預處理主要有三個方面的內容: 1.宏定義; 2.文件包含; 3.條件編譯。
預處理命令以符號「#」開頭。
宏定義命令:#define、#undef,用來定義和解除宏。(值得注意的是還可以定義帶參數的宏)
文件包含命令:#include "文件名" 或者 #include <文件名>。使用前者時會優先從當前目錄查找頭文件,使用後者時優先從默認的系統目錄查找。
條件編譯:#ifdef、#else、#endif、#elif 等。出於程序兼容性的考慮,有些語句希望在條件滿足時才編譯。這時候會用到條件編譯的命令。
④ 常見的預處理命令有哪兩種
很多小夥伴在自己寫代碼的時候,已經多次使用過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語言提供了多種預處理功能,如宏定義、文件包含、條件編譯等,合理地使用它們會使編寫的程序便於閱讀、修改、移植和調試,也有利於模塊化程
⑤ 預處理命令在書寫格式上有什麼要求
摘要 預處理指令是以#號開頭的代碼行。#號必須是該行除了任何空白字元外的第一個字元。#後是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字元。整行語句構成了一條預處理指令,該指令將在編譯器進行編譯之前對源代碼做某些轉換。下面是部分預處理指令:
⑥ 預處理指令只能位於C源程序文件的首部嗎 為什麼
不一定的,一般來說是要放在文件的首部的,1、防止編譯時出現,還沒有引入就使用的情況(如一些庫函數等的);2、代碼看起來美觀,大方,便於閱讀和修改
⑦ 編譯預處理命令中什麼字元作為首字元
#include "stdio.h",#define P 3。void *F(int x)/*定義一個無類型函數,它有返回值,只是返回的值是指向無類型數據的指針*/
void main(){printf("%d
",(int)F(1+3));/*將無類型函數F返回的指針值通過(int)強制轉換為int型*/
編譯器在編譯源代碼時都是從開頭到結尾依次讀取,自己定義的變數、宏等等都得放前面,這樣在編譯器在讀到它們時就作一個記錄;在使用這些變數、宏時,編譯器會在記錄中去尋找,如果找不到就會報錯——此變數未被定義。函數可以放在結尾(main()之後),但是必須在開頭作一個函數聲明(也叫函數原型)以使編譯器為它作記錄,以便以後使用它時可以在記錄中找到它。
函數也可以放在前面(main()之前),此時就不用再聲明了,編譯器在讀到它時也會作一個記錄。總之,自己定義的東西都得先聲明後使用,否則使用時在記錄中會找不到它。預處理命令也是自己定義的東西,同屬這一范疇。
⑧ 關於C語言預處理命令
第一句有問題。
比如
#ifndef WIN32
#endif printf("OK\n");
在這里,這個printf就不會被執行。也就是說, 一行中, 只能有一條預處理指令,
當編譯的預處理階段, 編譯器識別了一條完整的預處理指令後,後面的所有東西他都不要了。
對於第二句,在函數里,我們是可以使用預處理指令的。
比如
void fun(void)
{
#ifdef WIN32
... // 對於windows系統環境的操作
#else
... // 對於windows以外的系統環境的操作
#endif /* WIN32 */
...
}
樓上的同學, 你是在哪兒本書上看的? 介紹一下唄
⑨ 為什麼A是對的,預處理命令行都必須以#號開始 才是對的把
因為如果代碼是注釋它就不起作用了。
如/*注釋#define。
B、預處理命令行不可以 宏定義是可以的。
C、程序在執行過程中對預處理命令行進行處理。是在執行過程之前,所以才稱為預處理,就是先於程序處理的意思,這是對的。
宏定義又稱為宏代換、宏替換,簡稱「宏」。格式:#define標識符文本,其中的標識符就是所謂的符號常量,也稱為「宏名」。
D、對預處理命令行的處理是在編譯之前完成的,不是程序執行的過程中,選D。
正確的宏定義是#define S(r) ((r)*(r))
(2)宏名和參數的括弧間不能有空格
(3)宏替換只作替換,不做計算,不做表達式求解
(4)函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存
(5)宏的啞實結合不存在類型,也沒有類型轉換。
(6)宏展開使源程序變長,函數調用不會
(7)宏展開不佔運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)。