導航:首頁 > 源碼編譯 > 編譯指示字

編譯指示字

發布時間:2022-08-17 15:46:39

❶ verilog編譯指令是什麼

編譯器指令在指令之後的整個編譯過程中有效(可跨越多個文件)
可以理解為對編譯器進行「指示」 告訴編譯器一些用戶定義的規則

VHDL沒有編譯器指令(但是有EDA工具編譯器指令)

某些EDA工具提供只有該工具可識別的編譯器指令(不是標准 可以同時支持verilog和VHDL)

電子設計流程中 rtl到網表(以及各層次網表之間)的轉換叫「綜合」 這種說法是准確的
編譯是軟硬體通用的 意思是把編程語言轉換成機器碼(包括語法檢查)
平時基本上可以理解為一個意思

❷ 編譯器怎麼區分標識符和字元

首先要清楚標識符和字元的定義

舉例子就是 class string

舉例子就是 1,2,3,abc

然後要強調,編譯器是無法區分標識符和字元的,只有人事先為其規定好規則的情況下,編譯器才會按照標識符的方式去讀取。打個比方,我規定了class為類標識符,那當我程序里 出現了class test時,編譯器就會認為test是類而不是字元。不知道能不能理解,不過是個好問題

❸ 先行編譯標頭指示詞在c語言中是什麼

不同的編輯器顏色會不同,估計你使用的IDE是VC所以顯示的是藍色。只要編輯器支持代碼高亮,關鍵字顏色一般都會與普通的標識符不同,以示區別。

❹ 關於C語言預處理命令

第一句有問題。
比如
#ifndef WIN32
#endif printf("OK\n");
在這里,這個printf就不會被執行。也就是說, 一行中, 只能有一條預處理指令,
當編譯的預處理階段, 編譯器識別了一條完整的預處理指令後,後面的所有東西他都不要了。
對於第二句,在函數里,我們是可以使用預處理指令的。
比如
void fun(void)
{
#ifdef WIN32
... // 對於windows系統環境的操作
#else
... // 對於windows以外的系統環境的操作
#endif /* WIN32 */
...
}

樓上的同學, 你是在哪兒本書上看的? 介紹一下唄

❺ CJT格式怎麼打開

RES
1、游戲中的應用
RES只是一個文本文檔,其中包含一個文件列表。RES文件同BSP文件相對應。它用來通知HALF-LIFE伺服器向客戶端發送他們缺少的特定文件。除了後綴.RES,它必須和你的BSP文件名完全相同。因此,如果你的地圖名為cs_mymap.bsp,那麼你應該創建一個名為cs_mymap.res的文件。還有,BSP文件和BSP文件必須存放在同一目錄下。也就是說,都應該放在MOD根目錄下的"/maps"文件夾中。
RES文件的工作流程如下:
1.伺服器更換成你自定義的地圖,或者當自定義地圖開啟時客戶端連接到你的伺服器
2.伺服器查找跟地圖名(BSP文件)同名的RES文件
3.伺服器調用RES文件,並按照其中的文件列表查找圖片、聲音等等需要發送往客戶端的文件。
4.如果客戶端沒有這些指定的文件(或者存在同名文件但數據、大小不同),那麼伺服器將他們發送到客戶端。
5.RES文件中提及的所有文件被下載完成後,客戶端連接到伺服器,並進入游戲。
在商務、私人社交上
RES 通常印在名片上,表示宅電,其全稱是Residence
[編輯本段]2、Microsoft Internet Explore中的應用
當Win2003安裝完畢時,默認是開啟了Internet Explorer 增強的安全配置,可以在 控制面板--添加刪除程序--組件中將其刪除。
當開啟「增強的安全配置」後,每次在用戶打開網頁時,系統都會自動調用C:\Windows\System32下的shdoclc.dll文件(動態鏈接庫),從此文件中解壓、調用一個hardAdmin.htm的Web頁面,顯示給用戶。顯示的路徑是:res://shdoclc.dll/hardAdmin.htm(注意:不是HTTP)
RES狀態下的網頁附上一些官方的資料:
shdoclc - shdoclc.dll - DLL文件信息
DLL 文件: shdoclc 或者 shdoclc.dll
DLL 名稱: Microsoft Shell Doc Object and Control Library
描述:
shdoclc.dll是為Windows應用程序添加基礎文件和網路操作相關模塊。
屬於: Microsoft Windows
系統 DLL文件: 是
常見錯誤: File Not Found, Missing File, Exception Errors
安全等級 (0-5): 0
間諜軟體: 否
廣告軟體: 否
[編輯本段]3、Windows程序資源文件

(1)作用

RES文件在Windows編程中被稱為資源文件,用於存放字元串、程序圖標、其他引用圖片。Delphi的每個主程序中都含有{$R *.RES}指示字,表示家在於程序同名資源文件中存放的程序圖標。巧妙地利用資源文件對於編程有意想不到的作用。

(2)RES文件的生成

RES文件是由RC文件編譯而來的,請看以下RC文件示例:
文本文件「MyMusic.RC」:
SRC1 FILE1 OnlyYou.mp3
SRC2 FILE2 YesterdayOnceMore.mp3
SRC3 FILE3 MoonRiver.mp3
//另例:
//mycur cursor move.cur //加入游標
//mypic Bitmap Water.BMP //加入點陣圖
//mywav WAVE happy.wav //加入聲音
//myAVI AVI EPOEN.AVI //加入視頻
//myIco ICON CJT.ICO //加入圖標
其中,每一行表示聲明一項資源,每一項資源的聲明包含三個參數定義,第一個參數是資源的名稱,第二個參數是資源的類型描述(本例定義了三類),第三個參數是文件名。參數之間必須由空格隔開。
編寫完成「MyMusic.RC」文件後,將其與上述三個.MP3文件放置在同一文件夾中(為了避免由設置路徑帶來的麻煩)。然後以下面的命令行運行應用程序brcc32.exe(位於..\Delphi6\Bin):brcc32 mymusic.rc需要注意的是,該命令只能在命令行方式下執行。如果系統的PATH環境變數中不包含Delphi的運行路徑,那麼你還需要將brcc32.exe與MyMusic.RC、三個.MP3文件放置在同一路徑中進行。運行上述命令行後,將在同一路徑中得到文件「MyMusic.RES」,這就是一個獨立完整的資源文件。

(3)RES文件的載入

你只需要在項目中的某個單元中(最好是你需要利用這些資源的單元,這樣會使你的應用程序更具有可讀性)加入如下編譯指示:
{$R MyMusic.RES}
盡管該編譯指示可以位於單元的任何位置,但為了使你的源代碼結構合理,最好還是將其並列位於編譯指示「{$R *.dfm}」(每個含有窗體文件的單元中都含有該行編譯指示)。這里的編譯指示就明確告訴編譯器,在編譯應用程序時需要將資源文件「MyMusic.RES」包含到應用程序中。

(4)資源文件的還原

下面的過程將告訴你如何將應用程序中包含的資源(文件)重新還原。
procere MusicResToFile(const ResName, ResType,FileName: string);
var
Res: TResourceStream;
begin
Res := TResourceStream.Create(HInstance,ResName, PChar(ResType));
Res.SaveToFile(FileName); //將資源保存為文件,即還原文件
//你還可以進行其它的流操作,在內存中實現對資源利用而不必另存為文件
Res.Free;
end;
調用該過程的示例如:
MusicResToFile('SRC2', 'FILE2', 'TheSecondMusic.MP3');
值得一提的是,利用此方法,你完全可以製作自己的安裝程序,該安裝程序僅包含一個可執行文件,在該可執行文件中以資源的形式包含所有將要安裝的內容(文件)。此外,如果在你的應用程序中需要播放外部音頻文件(如背景音樂、聲音提示等),也可通過此方法將這些外部文件包含到應用程序中,從而避免用戶誤刪這些音頻文件導致應用程序的不完整。

(5)RES文件的調用

資源文件在Delphi中的關鍵字為hinstance.下面給出具體用法.
<1>游標的調用
首先在程序中定義一個值大於0的常量,因為Delphi本身用0-負16來索引默認
的游標,所以我們制定的游標應從表面上1開始索引。然後在窗口的Oncreat事件
中添加以下代碼:
screen.cursor[35]:=Loadcursor (hinstance,'mycur');
其中35為大於1的常量,mycur為游標在資源文件中的名字。如果希望在其他控
件上使用定製游標,例如Panel控制項,只需在程序的適當處加入以下代碼:
Panel1.cursor:=35;
<2>點陣圖的調用
新建一項工程,添加一Timage控制項,在需要顯示的地方寫以下代碼:
Var mymap:Hbitmap;
begin
mymap:=LoadBitmap(hinstance,'mypic');
Image1.picture.Bitmap.Handle:=mymap;
end;
其中"mypic"為點陣圖資源文件中的名稱。
〈3〉AVI文件的調用
新建一工程,添加一Animate控制項,在需要的地方加入:
animater1.resname:='myAVI';
animater1.Active:=true;
其中myAVI為視頻文件在資源文件中的名稱。
〈4〉調用WAV文件
在uses中加入mmsystm單元,以便在程序中播放WAV文件。播放時
Playsound(pchar('mywav'),hinstance,sndsync or snd_resource);
其中mywav為聲音文件在資源中的名稱。
〈5〉加入游標
加入游標比較容易,只要將res文件加入單元文件中即可。但需注意,名稱最好
取"W"."WW"等,使第一個字母盡量靠後,以免與主程序的圖標順序顛倒。這樣一
來,別人在使用你的程序時如果想選擇其它圖標就有很多選擇了。
補充:
1.資源類型除上述類型外,還可以字體文件,字元串文件等。
2.資源文件不但可以在標准圖形界面下使用還可在控制台下使用。
下面我們來試驗一下:
新建一工程,將唯一的一個Form刪除,然後修改工程文件。增加一句{$Apptype console},在uses子句中加入mmsystem,並將其它引用單元刪掉。將Begin和end之間語句刪掉。至此,我們就可和Turbo PASCAL下編程序一樣,且還可以調用windows的API和資源。將資源文件----{$R myfist.res}加入。在Begin和end之間寫下:
writeln('演示程序,按任意鍵開始!');
readln;
playsound(pchar('mywav'),hinstance,snd_sync or snd_resource);
writeln('演示結束!');
運行程序,將彈出一個標准DOS窗口,按任意鍵播放聲音文件。是不是很COOL呢!

cfg
CFG:控制流圖(Control flow graph)
控制流圖(CFG)是用在編譯器中的一個抽象數據結構。它是一個過程或程序的抽象表現,由編譯器在內部維護。每個在圖形中的節點代表一個基本塊,例如,沒有任何跳躍或跳躍目標的直線代碼塊;跳躍目標以一個塊開始,和以一個塊結束。定向邊緣被用於代表在控制流中的跳躍。在那裡,在大部分介紹中,兩個特定的設計塊:項目塊,通過它控制到流圖的輸入,和編輯塊,通過它全面控制流輸出。
-----------------------------------------------------------
.cfg:迅雷下載配置文件的後綴名
使用迅雷開始下載的時候,迅雷會根據所下載的文件創建兩個文件:*.td和*.td.cfg,這兩個文件是迅雷的臨時下載文件和配置文件,在*.td文件里是正在下載的數據,*.td.cfg文件是下載數據的配置文件,記錄了配置信息,如線程、存放目錄、用戶名、 密碼等。當文件下載完成後,迅雷會自動將*.td.cfg配置文件刪除,並將*.td臨時下載文件的後綴名.td去掉,變成所要正確下載的文件。如果下載文件的格式是td的,說明這個文件還沒有下載完,請繼續下載。
------------------------------------------------------------
CFG(Content-Free Grammar,上下文無關文法)
上下文無關文法(Content-Free Grammar, CFG)
在計算機科學中,若一個形式文法 G = (N, ∑, P, S) 的產生式規則都取如下的形式:V -> w,則稱之為上下文無關的,其中 V∈N ,w∈(N∪∑)* 。上下文無關文法取名為「上下文無關」的原因就是因為字元 V 總可以被字串 w 自由替換,而無需考慮字元 V 出現的上下文。一個形式語言是上下文無關的,如果它是由上下文無關文法生成的(條目上下文無關語言)。
上下文無關文法重要的原因在於它們擁有足夠強的表達力來表示大多數程序設計語言的語法;實際上,幾乎所有程序設計語言都是通過上下文無關文法來定義的。另一方面,上下文無關文法又足夠簡單,使得我們可以構造有效的分析演算法來檢驗一個給定字串是否是由某個上下文無關文法產生的。例子可以參見 LR 分析器和 LL 分析器。
BNF (巴克斯-諾爾範式)經常用來表達上下文無關文法。
上下文無關文法重要的原因在於它們擁有足夠強的表達力來表示大多數程序設計語言的語法;實際上,幾乎所有程序設計語言都是通過上下文無關文法來定義的。另一方面,上下文無關文法又足夠簡單,使得我們可以構造有效的分析演算法來檢驗一個給定字串是否是由某個上下文無關文法產生的。例子可以參見 LR 分析器和 LL 分析器。
文法規則使用相似的表示法。名字用斜體表示(但它是一種不同的字體,所以可與正則表達式相區分)。豎線仍表示作為選擇的元符號。並置也用作一種標准運算。但是這里沒有重復的元符號(如正則表達式中的星號*),稍後還會再講到它。表示法中的另一個差別是現在用箭頭符號「→」代替了等號來表示名字的定義。這是由於現在的名字不能簡單地由其定義取代,而需要更為復雜的定義過程來表示,這是由定義的遞歸本質決定的。
同正則表達式類似,文法規則是定義在一個字母表或符號集之上。在正則表達式中,這些符號通常就是字元,而在文法規則中,符號通常是表示字元串的記號。我們利用C中的枚舉類型定義了在掃描程序中的記號;為了避免涉及到特定實現語言(例如C)中表示記號的細節,就使用了正則表達式本身來表示記號。此時的記號就是一個固定的符號,如同在保留字 while 中或諸如+或: =這樣的特殊符號一樣,對於作為表示多於一個串的標識符和數的記號來說,代碼字體為斜體,這就同假設這個記號是正則表達式的名字(這是它經常的表示)一樣。

❻ 用什麼軟體可以打開RES或CFG文件

RES
1、游戲中的應用
RES只是一個文本文檔,其中包含一個文件列表。RES文件同BSP文件相對應。它用來通知HALF-LIFE伺服器向客戶端發送他們缺少的特定文件。除了後綴.RES,它必須和你的BSP文件名完全相同。因此,如果你的地圖名為cs_mymap.bsp,那麼你應該創建一個名為cs_mymap.res的文件。還有,BSP文件和BSP文件必須存放在同一目錄下。也就是說,都應該放在MOD根目錄下的"/maps"文件夾中。
RES文件的工作流程如下:
1.伺服器更換成你自定義的地圖,或者當自定義地圖開啟時客戶端連接到你的伺服器
2.伺服器查找跟地圖名(BSP文件)同名的RES文件
3.伺服器調用RES文件,並按照其中的文件列表查找圖片、聲音等等需要發送往客戶端的文件。
4.如果客戶端沒有這些指定的文件(或者存在同名文件但數據、大小不同),那麼伺服器將他們發送到客戶端。
5.RES文件中提及的所有文件被下載完成後,客戶端連接到伺服器,並進入游戲。
在商務、私人社交上
RES 通常印在名片上,表示宅電,其全稱是Residence
[編輯本段]2、Microsoft Internet Explore中的應用
當Win2003安裝完畢時,默認是開啟了Internet Explorer 增強的安全配置,可以在 控制面板--添加刪除程序--組件中將其刪除。
當開啟「增強的安全配置」後,每次在用戶打開網頁時,系統都會自動調用C:\Windows\System32下的shdoclc.dll文件(動態鏈接庫),從此文件中解壓、調用一個hardAdmin.htm的Web頁面,顯示給用戶。顯示的路徑是:res://shdoclc.dll/hardAdmin.htm(注意:不是HTTP)
RES狀態下的網頁附上一些官方的資料:
shdoclc - shdoclc.dll - DLL文件信息
DLL 文件: shdoclc 或者 shdoclc.dll
DLL 名稱: Microsoft Shell Doc Object and Control Library
描述:
shdoclc.dll是為Windows應用程序添加基礎文件和網路操作相關模塊。
屬於: Microsoft Windows
系統 DLL文件: 是
常見錯誤: File Not Found, Missing File, Exception Errors
安全等級 (0-5): 0
間諜軟體: 否
廣告軟體: 否
[編輯本段]3、Windows程序資源文件

(1)作用

RES文件在Windows編程中被稱為資源文件,用於存放字元串、程序圖標、其他引用圖片。Delphi的每個主程序中都含有{$R *.RES}指示字,表示家在於程序同名資源文件中存放的程序圖標。巧妙地利用資源文件對於編程有意想不到的作用。

(2)RES文件的生成

RES文件是由RC文件編譯而來的,請看以下RC文件示例:
文本文件「MyMusic.RC」:
SRC1 FILE1 OnlyYou.mp3
SRC2 FILE2 YesterdayOnceMore.mp3
SRC3 FILE3 MoonRiver.mp3
//另例:
//mycur cursor move.cur //加入游標
//mypic Bitmap Water.BMP //加入點陣圖
//mywav WAVE happy.wav //加入聲音
//myAVI AVI EPOEN.AVI //加入視頻
//myIco ICON CJT.ICO //加入圖標
其中,每一行表示聲明一項資源,每一項資源的聲明包含三個參數定義,第一個參數是資源的名稱,第二個參數是資源的類型描述(本例定義了三類),第三個參數是文件名。參數之間必須由空格隔開。
編寫完成「MyMusic.RC」文件後,將其與上述三個.MP3文件放置在同一文件夾中(為了避免由設置路徑帶來的麻煩)。然後以下面的命令行運行應用程序brcc32.exe(位於..\Delphi6\Bin):brcc32 mymusic.rc需要注意的是,該命令只能在命令行方式下執行。如果系統的PATH環境變數中不包含Delphi的運行路徑,那麼你還需要將brcc32.exe與MyMusic.RC、三個.MP3文件放置在同一路徑中進行。運行上述命令行後,將在同一路徑中得到文件「MyMusic.RES」,這就是一個獨立完整的資源文件。

(3)RES文件的載入

你只需要在項目中的某個單元中(最好是你需要利用這些資源的單元,這樣會使你的應用程序更具有可讀性)加入如下編譯指示:
{$R MyMusic.RES}
盡管該編譯指示可以位於單元的任何位置,但為了使你的源代碼結構合理,最好還是將其並列位於編譯指示「{$R *.dfm}」(每個含有窗體文件的單元中都含有該行編譯指示)。這里的編譯指示就明確告訴編譯器,在編譯應用程序時需要將資源文件「MyMusic.RES」包含到應用程序中。

(4)資源文件的還原

下面的過程將告訴你如何將應用程序中包含的資源(文件)重新還原。
procere MusicResToFile(const ResName, ResType,FileName: string);
var
Res: TResourceStream;
begin
Res := TResourceStream.Create(HInstance,ResName, PChar(ResType));
Res.SaveToFile(FileName); //將資源保存為文件,即還原文件
//你還可以進行其它的流操作,在內存中實現對資源利用而不必另存為文件
Res.Free;
end;
調用該過程的示例如:
MusicResToFile('SRC2', 'FILE2', 'TheSecondMusic.MP3');
值得一提的是,利用此方法,你完全可以製作自己的安裝程序,該安裝程序僅包含一個可執行文件,在該可執行文件中以資源的形式包含所有將要安裝的內容(文件)。此外,如果在你的應用程序中需要播放外部音頻文件(如背景音樂、聲音提示等),也可通過此方法將這些外部文件包含到應用程序中,從而避免用戶誤刪這些音頻文件導致應用程序的不完整。

(5)RES文件的調用

資源文件在Delphi中的關鍵字為hinstance.下面給出具體用法.
<1>游標的調用
首先在程序中定義一個值大於0的常量,因為Delphi本身用0-負16來索引默認
的游標,所以我們制定的游標應從表面上1開始索引。然後在窗口的Oncreat事件
中添加以下代碼:
screen.cursor[35]:=Loadcursor (hinstance,'mycur');
其中35為大於1的常量,mycur為游標在資源文件中的名字。如果希望在其他控
件上使用定製游標,例如Panel控制項,只需在程序的適當處加入以下代碼:
Panel1.cursor:=35;
<2>點陣圖的調用
新建一項工程,添加一Timage控制項,在需要顯示的地方寫以下代碼:
Var mymap:Hbitmap;
begin
mymap:=LoadBitmap(hinstance,'mypic');
Image1.picture.Bitmap.Handle:=mymap;
end;
其中"mypic"為點陣圖資源文件中的名稱。
〈3〉AVI文件的調用
新建一工程,添加一Animate控制項,在需要的地方加入:
animater1.resname:='myAVI';
animater1.Active:=true;
其中myAVI為視頻文件在資源文件中的名稱。
〈4〉調用WAV文件
在uses中加入mmsystm單元,以便在程序中播放WAV文件。播放時
Playsound(pchar('mywav'),hinstance,sndsync or snd_resource);
其中mywav為聲音文件在資源中的名稱。
〈5〉加入游標
加入游標比較容易,只要將res文件加入單元文件中即可。但需注意,名稱最好
取"W"."WW"等,使第一個字母盡量靠後,以免與主程序的圖標順序顛倒。這樣一
來,別人在使用你的程序時如果想選擇其它圖標就有很多選擇了。
補充:
1.資源類型除上述類型外,還可以字體文件,字元串文件等。
2.資源文件不但可以在標准圖形界面下使用還可在控制台下使用。
下面我們來試驗一下:
新建一工程,將唯一的一個Form刪除,然後修改工程文件。增加一句{$Apptype console},在uses子句中加入mmsystem,並將其它引用單元刪掉。將Begin和end之間語句刪掉。至此,我們就可和Turbo PASCAL下編程序一樣,且還可以調用windows的API和資源。將資源文件----{$R myfist.res}加入。在Begin和end之間寫下:
writeln('演示程序,按任意鍵開始!');
readln;
playsound(pchar('mywav'),hinstance,snd_sync or snd_resource);
writeln('演示結束!');
運行程序,將彈出一個標准DOS窗口,按任意鍵播放聲音文件。是不是很COOL呢!

cfg
CFG:控制流圖(Control flow graph)
控制流圖(CFG)是用在編譯器中的一個抽象數據結構。它是一個過程或程序的抽象表現,由編譯器在內部維護。每個在圖形中的節點代表一個基本塊,例如,沒有任何跳躍或跳躍目標的直線代碼塊;跳躍目標以一個塊開始,和以一個塊結束。定向邊緣被用於代表在控制流中的跳躍。在那裡,在大部分介紹中,兩個特定的設計塊:項目塊,通過它控制到流圖的輸入,和編輯塊,通過它全面控制流輸出。
-----------------------------------------------------------
.cfg:迅雷下載配置文件的後綴名
使用迅雷開始下載的時候,迅雷會根據所下載的文件創建兩個文件:*.td和*.td.cfg,這兩個文件是迅雷的臨時下載文件和配置文件,在*.td文件里是正在下載的數據,*.td.cfg文件是下載數據的配置文件,記錄了配置信息,如線程、存放目錄、用戶名、 密碼等。當文件下載完成後,迅雷會自動將*.td.cfg配置文件刪除,並將*.td臨時下載文件的後綴名.td去掉,變成所要正確下載的文件。如果下載文件的格式是td的,說明這個文件還沒有下載完,請繼續下載。
------------------------------------------------------------
CFG(Content-Free Grammar,上下文無關文法)
上下文無關文法(Content-Free Grammar, CFG)
在計算機科學中,若一個形式文法 G = (N, ∑, P, S) 的產生式規則都取如下的形式:V -> w,則稱之為上下文無關的,其中 V∈N ,w∈(N∪∑)* 。上下文無關文法取名為「上下文無關」的原因就是因為字元 V 總可以被字串 w 自由替換,而無需考慮字元 V 出現的上下文。一個形式語言是上下文無關的,如果它是由上下文無關文法生成的(條目上下文無關語言)。
上下文無關文法重要的原因在於它們擁有足夠強的表達力來表示大多數程序設計語言的語法;實際上,幾乎所有程序設計語言都是通過上下文無關文法來定義的。另一方面,上下文無關文法又足夠簡單,使得我們可以構造有效的分析演算法來檢驗一個給定字串是否是由某個上下文無關文法產生的。例子可以參見 LR 分析器和 LL 分析器。
BNF (巴克斯-諾爾範式)經常用來表達上下文無關文法。
上下文無關文法重要的原因在於它們擁有足夠強的表達力來表示大多數程序設計語言的語法;實際上,幾乎所有程序設計語言都是通過上下文無關文法來定義的。另一方面,上下文無關文法又足夠簡單,使得我們可以構造有效的分析演算法來檢驗一個給定字串是否是由某個上下文無關文法產生的。例子可以參見 LR 分析器和 LL 分析器。
文法規則使用相似的表示法。名字用斜體表示(但它是一種不同的字體,所以可與正則表達式相區分)。豎線仍表示作為選擇的元符號。並置也用作一種標准運算。但是這里沒有重復的元符號(如正則表達式中的星號*),稍後還會再講到它。表示法中的另一個差別是現在用箭頭符號「→」代替了等號來表示名字的定義。這是由於現在的名字不能簡單地由其定義取代,而需要更為復雜的定義過程來表示,這是由定義的遞歸本質決定的。
同正則表達式類似,文法規則是定義在一個字母表或符號集之上。在正則表達式中,這些符號通常就是字元,而在文法規則中,符號通常是表示字元串的記號。我們利用C中的枚舉類型定義了在掃描程序中的記號;為了避免涉及到特定實現語言(例如C)中表示記號的細節,就使用了正則表達式本身來表示記號。此時的記號就是一個固定的符號,如同在保留字 while 中或諸如+或: =這樣的特殊符號一樣,對於作為表示多於一個串的標識符和數的記號來說,代碼字體為斜體,這就同假設這個記號是正則表達式的名字(這是它經常的表示)一樣。

❼ res文件怎麼打開

用編程軟體就可以打開。用Visual Studio等。
RES文件在Windows編程中被稱為資源文件,用於存放字元串、程序圖標、其他引用圖片。Delphi的每個主程序中都含有{$R *.RES}指示字,表示家在於程序同名資源文件中存放的程序圖標。巧妙地利用資源文件對於編程有意想不到的作用。
只需要在項目中的某個單元中(最好是需要利用這些資源的單元,這樣會使應用程序更具有可讀性)加入如下編譯指示:
{$R MyMusic.RES}
盡管該編譯指示可以位於單元的任何位置,但為了使源代碼結構合理,最好還是將其並列位於編譯指示「{$R *.dfm}」(每個含有窗體文件的單元中都含有該行編譯指示)。這里的編譯指示就明確告訴編譯器,在編譯應用程序時需要將資源文件「MyMusic.RES」包含到應用程序中。

❽ 預處理指令#pragma db code是什麼意思

一、作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。#pragma指令對每個編譯器給出了一個方法,在保持與C和 C++語言完全兼容的情況下,給出主機或操作系統專有的特徵。依據定義,編譯指示是機器或操作系統專有的,且對於每個編譯器都是不同的。

二、常用的pragma指令的詳細解釋。
1.#pragma once。保證所在文件只會被包含一次,它是基於磁碟文件的,而#ifndef則是基於宏的。
2.#pragma warning。允許有選擇性的修改編譯器的警告消息的行為。有如下用法:
#pragma warning(disable:4507 34; once:4385; error:164) 等價於:
#pragma warning(disable:4507 34) // 不顯示4507和34號警告信息
#pragma warning(once:4385) // 4385號警告信息僅報告一次
#pragma warning(error:164) // 把164號警告信息作為一個錯誤
#pragma warning(default:176) // 重置編譯器的176號警告行為到默認狀態
同時這個pragma warning也支持如下格式,其中n代表一個警告等級(1---4):
#pragma warning(push) // 保存所有警告信息的現有的警告狀態
#pragma warning(push,n) // 保存所有警告信息的現有的警告狀態,並設置全局報警級別為n
#pragma warning(pop) // 恢叢 鵲木 孀刺 趐ush和pop之間所做的一切改動將取消
例如:
#pragma warning(push)
#pragma warning(disable:4705)
#pragma warning(disable:4706)
#pragma warning(disable:4707)
#pragma warning(pop)
在這段代碼後,恢復所有的警告信息(包括4705,4706和4707)。
3.#pragma hdrstop。表示預編譯頭文件到此為止,後面的頭文件不進行預編譯。BCB可以預編譯頭文件以 加快鏈接的速度,但如果所有頭文件都進行預編譯又可能占太多磁碟空間,所以使用這個選項排除一些頭文 件。
4.#pragma message。在標准輸出設備中輸出指定文本信息而不結束程序運行。用法如下:
#pragma message("消息文本")。當編譯器遇到這條指令時就在編譯輸出窗口中將「消息文本」列印出來。
5.#pragma data_seg。一般用於DLL中,它能夠設置程序中的初始化變數在obj文件中所在的數據段。如果未指定參數,初始化變數將放置在默認數據段.data中,有如下用法:
#pragma data_seg("Shared") // 定義了數據段"Shared",其中有兩個變數a和b
int a = 0; // 存儲在數據段"Shared"中
int b; // 存儲在數據段".bss"中,因為沒有初始化
#pragma data_seg() // 表示數據段"Shared"結束,該行代碼為可選的
對變數進行專門的初始化是很重要的,否則編譯器將把它們放在普通的未初始化數據段中而不是放在shared中。如上述的變數b其實是放在了未初始化數據段.bss中。
#pragma data_seg("Shared")
int j = 0; // 存儲在數據段"Shared"中
#pragma data_seg(push, stack1, "Shared2") //定義數據段Shared2,並將該記錄賦予別名stack1,然後放入內部編譯器棧中
int l = 0; // 存儲在數據段"Shared2"中
#pragma data_seg(pop, stack1) // 從內部編譯器棧中彈出記錄,直到彈出stack1,如果沒有stack1,則不做任何操作
int m = 0; // 存儲在數據段"Shared"中,如果沒有上述pop段,則該變數將儲在數據段"Shared2"中
6.#pragma code_seg。它能夠設置程序中的函數在obj文件中所在的代碼段。如果未指定參數,函數將放置在默認代碼段.text中,有如下用法:
void func1() { // 默認存儲在代碼段.text中
}
#pragma code_seg(".my_data1")
void func2() { // 存儲在代碼段.my_data1中
}
#pragma code_seg(push, r1, ".my_data2")
void func3() { // 存儲在代碼段.my_data2中
}
#pragma code_seg(pop, r1)
void func4() { // 存儲在代碼段.my_data1中
}
7.#pragma pack。用來改變編譯器的位元組對齊方式。常規用法為:
#pragma pack(n) //將編譯器的位元組對齊方式設為n,n的取值一般為1、2、4、8、16,一般默認為8
#pragma pack(show) //以警告信息的方式將當前的位元組對齊方式輸出
#pragma pack(push) //將當前的位元組對齊方式放入到內部編譯器棧中
#pragma pack(push,4) //將位元組對齊方式4放入到內部編譯器棧中,並將當前的內存對齊方式設置為4
#pragma pack(pop) //將內部編譯器棧頂的記錄彈出,並將其作為當前的內存對齊方式
#pragma pack(pop,4) //將內部編譯器棧頂的記錄彈出,並將4作為當前的內存對齊方式
#pragma pack(pop,r1) //r1為自定義的標識符,將內部編譯器中的記錄彈出,直到彈出r1,並將r1的值作為當前的內存對齊方式;如果r1不存在,當不做任何操作
8.#pragma comment。將一個注釋記錄放置到對象文件或可執行文件中。
其格式為:#pragma comment( comment-type [,"commentstring"] )。其中,comment-type是一個預定義的標識符,指定注釋的類型,應該是compiler,exestr,lib,linker,user之一。
compiler:放置編譯器的版本或者名字到一個對象文件,該選項是被linker忽略的。
exestr:在以後的版本將被取消。
lib:放置一個庫搜索記錄到對象文件中,這個類型應該與commentstring(指定Linker要搜索的lib的名稱和路徑)所指定的庫類型一致。在對象文件中,庫的名字跟在默認搜索記錄後面;linker搜索這個這個庫就像你在命令行輸入這個命令一樣。你可以在一個源文件中設置多個庫搜索記錄,它們在obj文件中出現的順序與在源文件中出現的順序一樣。
如果默認庫和附加庫的次序是需要區別的,使用/Zl編譯開關可防止默認庫放到object模塊中。
linker:指定一個連接選項,這樣就不用在命令行輸入或者在開發環境中設置了。只有下面的linker選項能被傳給Linker:
/DEFAULTLIB
/EXPORT
/INCLUDE
/MANIFESTDEPENDENCY
/MERGE
/SECTION
(1)/DEFAULTLIB:library
/DEFAULTLIB選項將一個library添加到LINK在解析引用時搜索的庫列表。用/DEFAULTLIB指定的庫在命令行上指定的庫之後和obj文件中指定的默認庫之前被搜索。
忽略所有默認庫(/NODEFAULTLIB)選項重寫/DEFAULTLIB:library。如果在兩者中指定了相同的library名稱,忽略庫(/NODEFAULTLIB:library)選項將重寫/DEFAULTLIB:library。
(2)/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]
使用該選項,可以從程序導出函數以便其他程序可以調用該函數,也可以導出數據。通常在DLL中定義導出。
entryname是調用程序要使用的函數或數據項的名稱。ordinal為導出表的索引,取值范圍在1至65535;如果沒有指定ordinal,則LINK將分配一個。NONAME關鍵字只將函數導出為序號,沒有entryname。DATA 關鍵字指定導出項為數據項。客戶程序中的數據項必須用extern __declspec(dllimport)來聲明。
有三種導出定義的方法,按照建議的使用順序依次為:
源代碼中的__declspec(dllexport)
.def文件中的EXPORTS語句
LINK命令中的/EXPORT規范
所有這三種方法可以用在同一個程序中。LINK在生成包含導出的程序時還要創建導入庫,除非在生成過程中使用了.exp 文件。
LINK使用標識符的修飾形式。編譯器在創建obj文件時修飾標識符。如果entryname以其未修飾的形式指定給鏈接器(與其在源代碼中一樣),則LINK將試圖匹配該名稱。如果無法找到唯一的匹配名稱,則LINK發出錯誤信息。當需要將標識符指定給鏈接器時,請使用Dumpbin工具獲取該標識符的修飾名形式。
(3)/INCLUDE:symbol
/INCLUDE選項通知鏈接器將指定的符號添加到符號表。若要指定多個符號,請在符號名稱之間鍵入逗號(,)、分號(;)或空格。在命令行上,對每個符號需指定一次/INCLUDE:symbol。
鏈接器通過將包含符號定義的對象添加到程序來解析symbol。該功能對於添加不會鏈接到程序的庫對象非常有用。
用該選項所指定的符號將覆蓋通過/OPT:REF對該符號進行的移除操作。
(4)/MANIFESTDEPENDENCY:manifest_dependency
/MANIFESTDEPENDENCY允許你指定位於manifest文件的段的屬性。/MANIFESTDEPENDENCY信息可以通過下面兩種方式傳遞給LINK:
直接在命令行運行/MANIFESTDEPENDENCY
通過#pragma comment
(5)/MERGE:from=to
/MERGE選項將第一個段(from)與第二個段(to)進行聯合,並將聯合後的段命名為to的名稱。
如果第二個段不存在,LINK將段(from)重命名為to的名稱。
/MERGE選項對於創建VxDs和重寫編譯器生成的段名非常有用。
(6)/SECTION:name,[[!]{DEKPRSW}][,ALIGN=#]
/SECTION選項用來改變段的屬性,當指定段所在的obj文件編譯的時候重寫段的屬性集。
可移植的可執行文件(PE)中的段(section)與新可執行文件(NE)中的節區(segment)或資源大致相同。
段(section)中包含代碼或數據。與節區(segment)不同的是,段(section)是沒有大小限制的連續內存塊。有些段中的代碼或數據是你的程序直接定義和使用的,而有些數據段是鏈接器和庫管理器(lib.exe)創建的,並且包含了對操作系統來說很重要的信息。
/SECTION選項中的name是大小寫敏感的。
不要使用以下名稱,因為它們與標准名稱會沖突,例如,.sdata是RISC平台使用的。
.arch
.bss
.data
.edata
.idata
.pdata
.rdata
.reloc
.rsrc
.sbss
.sdata
.srdata
.text
.xdata
為段指定一個或多個屬性。屬性不是大小寫敏感的。對於一個段,你必須將希望它具有的屬性都進行指定;如果某個屬性未指定,則認為是不具備這個屬性。如果你未指定R,W或E,則已存在的讀,寫或可執行狀態將不發生改變。
要對某個屬性取否定意義,只需要在屬性前加感嘆號(!)。
E:可執行的
R:可讀取的
W:可寫的
S:對於載入該段的鏡像的所有進程是共享的
D:可廢棄的
K:不可緩存的
P:不可分頁的
注意K和P是表示否定含義的。
PE文件中的段如果沒有E,R或W屬性集,則該段是無效的。
ALIGN=#選項讓你為一個具體的段指定對齊值。
user:放置一個常規注釋到一個對象文件中,該選項是被linker忽略的。
9.#pragma section。創建一個段。
其格式為:#pragma section( "section-name" [, attributes] )
section-name是必選項,用於指定段的名字。該名字不能與標准段的名字想沖突。可用/SECTION查看標准段的名稱列表。
attributes是可選項,用於指定段的屬性。可用屬性如下,多個屬性間用逗號(,)隔開:
read:可讀取的
write:可寫的
execute:可執行的
shared:對於載入該段的鏡像的所有進程是共享的
nopage:不可分頁的,主要用於Win32的設備驅動程序中
nocache:不可緩存的,主要用於Win32的設備驅動程序中
discard:可廢棄的,主要用於Win32的設備驅動程序中
remove:非內存常駐的,僅用於虛擬設備驅動(VxD)中
如果未指定屬性,默認屬性為read和write。
在創建了段之後,還要使用__declspec(allocate)將代碼或數據放入段中。
例如:
//pragma_section.cpp
#pragma section("mysec",read,write)
int j = 0;
__declspec(allocate("mysec"))
int i = 0;
int main(){}
該例中, 創建了段"mysec",設置了read,write屬性。但是j沒有放入到該段中,而是放入了默認的數據段中,因為它沒有使用__declspec(allocate)進行聲明;而i放入了該段中,因為使用__declspec(allocate)進行了聲明。
10.#pragma push_macro與#pragma pop_macro。前者將指定的宏壓入棧中,相當於暫時存儲,以備以後使用;後者將棧頂的宏出棧,彈出的宏將覆蓋當前名稱相同的宏。例如:
#include
#define X 1
#define Y 2
int main() {
printf("%d",X);
printf("\n%d",Y);
#define Y 3 // C4005
#pragma push_macro("Y")
#pragma push_macro("X")
printf("\n%d",X);
#define X 2 // C4005
printf("\n%d",X);
#pragma pop_macro("X")
printf("\n%d",X);
#pragma pop_macro("Y")
printf("\n%d",Y);
}
輸出結果:
1
2
1
2
1
3

❾ C語言的按照標識符、關鍵字、常用編譯指令有哪些

我們可以在C源程序中插入傳給編譯程序的各中指令,這些指令被稱為預處理器指令,它們擴充了程序設計的環境。現把常用的預處理命令總結如下:
1. 預處理程序
按照ANSI標準的定義,預處理程序應該處理以下指令:
#if #ifdef #ifndef #else #elif
#endif
#define
#undef
#line
#error
#pragma
#include
顯然,上述所有的12個預處理指令都以符號#開始,,每條預處理指令必須獨佔一行。
2. #define
#define指令定義一個標識符和一個串(也就是字元集),在源程序中發現該標識符時,都用該串替換之。這種標識符稱為宏名字,相應的替換稱為宏代換。一般形式如下:
#define macro-name char-sequence
這種語句不用分號結尾。宏名字和串之間可以有多個空白符,但串開始後只能以新行終止。
例如:我們使用LEFT代表1,用RIGHT代表0,我們使用兩個#define指令:
#define LEFT 1
#define RIGHT 0
每當在源程序中遇到LEFT或RIGHT時,編譯程序都用1或0替換。
定義一個宏名字之後,可以在其他宏定義中使用,例如:
#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO
宏代換就是用相關的串替代標識符。因此,如果希望定義一條標准錯誤信息時,可以如下定義:
#define ERROR_MS 「Standard error on input \n」
如果一個串長於一行,可在行尾用反斜線」\」續行,如下:
#define LONG_STRING 「This is a very very long \
String that is used as an example」
3. #error
#error指令強制編譯程序停止編譯,它主要用於程序調試。#error指令的一般形式是:
#error error-message
注意,宏串error-message不用雙引號包圍。遇到#error指令時,錯誤信息被顯示,可能同時還顯示編譯程序作者預先定義的其他內容。
4. #include
程序中的#include指令要求編譯程序讀入另一個源文件。被讀入文件的名字必須用雙引號(「」)或一對尖括弧(<>)包圍,例如:
#include 「stdio.h」
#include <stdio.h>
都使C編譯程序讀入並編譯頭文件以用於I/O系統庫函數。
包含文件中可以包含其他#include指令,稱為嵌套包含。允許的最大嵌套深度隨編譯器而變。
文件名被雙括弧或尖括弧包圍決定了對指定文件的搜索方式。文件名被尖括弧包圍時,搜索按編譯程序作者的定義進行,一般用於搜索某些專門放置包含文件的特殊目錄。當文件名被雙括弧包圍時,搜索按編譯程序實時的規定進行,一般搜索當前目錄。如未發現,再按尖括弧包圍時的辦法重新搜索一次。
通常,絕大多數程序員使用尖括弧包圍標準的頭文件,雙引號用於包圍與當前程序相關的文件名。
5. 條件編譯指令
若干編譯指令允許程序員有選擇的編譯程序源代碼的不同部分,這種過程稱為條件編譯。
5.1#if、#else、#elif #endif
條件編譯指令中最常用的或許是#if,#else,#elif和#endif。這些指令允許程序員根據常數表達式的結果有條件的包圍部分代碼。
#if的一般形式是:
#if constant-expression
Statement sequence
#endif
如#if後的常數表達式為真,則#if和#endif中間的代碼被編譯,否則忽略該代碼段。#endif標記#if塊的結束。
#else指令的作用與C語言的else相似,#if指令失敗時它可以作為備選指令。例如:
#include <stdio.h>
#define MAX 100
Int main(void)
{
#if MAX>99
printf(「Compiled for array greater than 99.\n」);
#else
printf(「Complied for small array.\n」);
#endif
return 0;
}

閱讀全文

與編譯指示字相關的資料

熱點內容
數學乘法速演算法 瀏覽:986
壓縮包製作後照片順序怎麼改 瀏覽:680
fibonacci數列演算法 瀏覽:775
產品經理要和程序員吵架嗎 瀏覽:252
grub2命令行 瀏覽:618
無法獲取加密卡信息 瀏覽:774
雲伺服器網卡充值 瀏覽:509
編程就是軟體 瀏覽:49
伺服器如何添加許可權 瀏覽:437
引用指針編程 瀏覽:851
手機加密日記本蘋果版下載 瀏覽:64
命令行括弧 瀏覽:176
java程序升級 瀏覽:490
排序演算法之插入類 瀏覽:227
gcccreate命令 瀏覽:73
海爾監控用什麼app 瀏覽:64
系統盤被壓縮開不了機 瀏覽:985
linuxredis30 瀏覽:541
狸窩pdf轉換器 瀏覽:697
ajax調用java後台 瀏覽:906