當前位置:首頁 » 編程軟體 » 如何讀取編譯指令

如何讀取編譯指令

發布時間: 2023-09-06 18:54:41

c語言編譯預處理

編譯,編譯程序讀取源程序(字元流),對之進行詞法和語法的分析,將高級語言指令轉換為功能等效的匯編代碼,再由匯編程序轉換為機器語言,並且按照操作系統對可執行文件格式的要求鏈接生成可執行程序。

如果用一張圖來表示:

讀取c源程序,對其中的偽指令(以#開頭的指令)和特殊符號進行處理

[析] 偽指令主要包括以下四個方面

(1)宏定義指令,如#define Name TokenString,#undef等。對於前一個偽指令,預編譯所要做的是將程序中的所有Name用TokenString替換,但作為字元串常量的Name則不被替換。對於後者,則將取消對某個宏的定義,使以後該串的'出現不再被替換。

(2)條件編譯指令,如#ifdef,#ifndef,#else,#elif,#endif,等等。這些偽指令的引入使得程序員可以通過定義不同的宏來決定編譯程序對哪些代碼進行處理。預編譯程序將根據有關的文件,將那些不必要的代碼過濾掉

(3)頭文件包含指令,如#include "FileName"或者#include 等。在頭文件中一般用偽指令#define定義了大量的宏(最常見的是字元常量),同時包含有各種外部符號的聲明。採用頭文件的目的主要是為了使某些定義可以供多個不同的C源程序使用。因為在需要用到這些定義的C源程序中,只需加上一條#include語句即可,而不必再在此文件中將這些定義重復一遍。預編譯程序將把頭文件中的定義統統都加入到它所產生的輸出文件中,以供編譯程序對之進行處理。

包含到c源程序中的頭文件可以是系統提供的,這些頭文件一般被放在/usr/include目錄下。在程序中#include它們要使用尖括弧(<>)。另外開發人員也可以定義自己的頭文件,這些文件一般與c源程序放在同一目錄下,此時在#include中要用雙引號("")。

(4)特殊符號,預編譯程序可以識別一些特殊的符號。例如在源程序中出現的LINE標識將被解釋為當前行號(十進制數),FILE則被解釋為當前被編譯的C源程序的名稱。預編譯程序對於在源程序中出現的這些串將用合適的值進行替換。

注意:

預編譯程序所完成的基本上是對源程序的「替代」工作。經過此種替代,生成一個沒有宏定義、沒有條件編譯指令、沒有特殊符號的輸出文件。這個文件的含義同沒有經過預處理的源文件是相同的,但內容有所不同。下一步,此輸出文件將作為編譯程序的輸出而被翻譯成為機器指令。

linux中make, make install命令分別是什麼,用法

make是用來編譯的,它從Makefile中讀取指令,然後編譯。

make install是用來安裝的,它也從Makefile中讀取指令,安裝到指定的位置。

用法:

1、make:

這一步就是編譯,大多數的源代碼包都經過這一步進行編譯(當然有些perl或python編寫的軟體需要調用perl或python來進行編譯)。

如果 在 make 過程中出現 error ,就要記下錯誤代碼(注意不僅僅是最後一行),然後可以向開發者提交 bugreport(一般在 INSTALL 里有提交地址)。

或者系統少了一些依賴庫等,這些需要自己仔細研究錯誤代碼。

make 的作用是開始進行源代碼編譯,以及一些功能的提供,這些功能由他的 Makefile 設置文件提供相關的功能。

比如 make install 一般表示進行安裝,make uninstall 是卸載,不加參數就是默認的進行源代碼編譯。

make 是 Linux 開發套件裡面自動化編譯的一個控製程序,他通過藉助 Makefile 裡面編寫的編譯規范進行自動化的調用 gcc 、ld 以及運行某些需要的程序進行編譯的程序。

一般情況下,他所使用的 Makefile 控制代碼,由 configure 這個設置腳本根據給定的參數和系統環境生成。

2、make install

這條命令來進行安裝(當然有些軟體需要先運行 make check 或 make test來進行一些測試),這一步一般需要你有 root 許可權(因為要向系統寫入文件)。

(2)如何讀取編譯指令擴展閱讀

當我們在使用make命令時,常常會在make後面加上其他單詞,比如check,install,installcheck…這些單詞都是make的參數,我們稱之為「目標(targets)」。

最常見的幾個目標:

make all:編譯程序、庫、文檔等(等同於make)

make install:安裝已經編譯好的程序。復制文件樹中到文件到指定的位置

make unistall:卸載已經安裝的程序。

make clean:刪除由make命令產生的文件

make distclean:刪除由./configure產生的文件

make check:測試剛剛編譯的軟體(某些程序可能不支持)

make installcheck:檢查安裝的庫和程序(某些程序可能不支持)

make dist:重新打包成packname-version.tar.gz

㈢ C語言文件的編譯與執行的四個階段並分別描述

開發C程序有四個步驟:編輯、編譯、連接和運行。

任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。

1、預處理:導入源程序並保存(C文件)。

2、編譯:將源程序轉換為目標文件(Obj文件)。

3、鏈接:將目標文件生成為可執行文件(EXE文件)。

4、運行:執行,獲取運行結果的EXE文件。

(3)如何讀取編譯指令擴展閱讀:

將C語言代碼分為程序的幾個階段:

1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。

2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。

3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。

4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。

㈣ 請問linux下,gcc編譯程序的過程(從讀取源文件到製作可執行程序中間所有過程,越詳細越好)

gcc -S *.c 預處理+反匯編

㈤ 簡述從c#源代碼到可執行程序指令的轉換過程

1、編碼喊譯預處理。讀取c源程序,游察對神模茄其中的偽指令(以#開頭的指令)和特殊符號進行處理。偽指令主要包括以下四個方面:
(1)宏定義指令;
(2)條件編譯指令;
(3)頭文件包含指令;
(4)特殊符號;
2、編譯階段。
經過預編譯得到的輸出文件中,將只有常量。如數字、字元串、變數的定義,以及C語言的關鍵字,如main,if,else,for,while,{,},+,-,*,\,等等。預編譯程序所要作得工作就是通過詞法分析和語法分析,在確認所有的指令都符合語法規則之後,將其翻譯成等價的中間代碼表示或匯編代碼。
3、優化階段。
4、匯編過程。UNIX環境下主要有三種類型的目標文件:
(1)可重定位文件;
(2)共享的目標文件;
(3)可執行文件;
5、鏈接程序。根據開發人員指定的同庫函數的鏈接方式的不同,鏈接處理可分為兩種:
(1)靜態鏈接;
(2)動態鏈接;
經過上述五個過程,C源程序就最終被轉換成可執行文件了。

㈥ vs2013運行出現問題,編譯不了,提示fatal error C1069: 無法讀取編譯器命令行

1 頭部#include文件錯誤,#include 後面的包含的文件時,如果使用的是 "<>" 尖括弧的話, 表示讓編譯器在系統頭文件夾中查找對應名字的頭文件, 當使用""引號時,就是讓編譯器在當前程序目錄下查找對應名字的頭文件,如果沒有找到,則編譯器會再在系統頭文件夾中查找該頭文件. 注意#include文件到位置。
2 感覺是編譯器兼容問題,比如:include 「streams.h」有的情況下在vs2003編譯通過的情況下,在vs。net編譯無法通過,改成,include "streams"去掉.h就可以了。

3 有可能是文件整理後移動位置,將與編譯頭文件和cpp文件目錄修改導致錯誤,用記事本打開.dsp文件,找到與編譯cpp文件,少了個與編譯開關所以不能生成與編譯頭文件:.pch
加入開關:# ADD CPP /Yc"。h文件"。例如:
SOURCE=.\StdAfx.cpp
# End Source File
# Begin Source File
發現少了個與編譯開關所以不能生成與編譯頭文件:。pch
加入開關:# ADD CPP /Yc"stdafx.h"
SOURCE=.\StdAfx.cpp
# ADD CPP /Yc"stdafx.h"
# End Source File
# Begin Source File

4 在編譯directshow源碼的時候注意將C:\DXSDK\Samples\C++\DirectShow\BaseClasses下的文件先進性一次編譯。

5 tools->options->directories 里的lib設置問題

6 有的時候需要使用#program comment(lib,"")命令導入一個lib庫文件。讓編譯器在該庫文件中搜索,引入的頭文件。

熱點內容
個人個稅賬號密碼是什麼 發布:2024-11-19 22:37:57 瀏覽:359
c語言二級試題及答案 發布:2024-11-19 22:35:07 瀏覽:937
pythonforin報錯 發布:2024-11-19 22:33:27 瀏覽:836
android系統資源 發布:2024-11-19 22:21:50 瀏覽:388
androidapi中文chm 發布:2024-11-19 22:15:25 瀏覽:804
安卓鏈接文件夾 發布:2024-11-19 21:49:35 瀏覽:269
GP演算法 發布:2024-11-19 21:48:05 瀏覽:181
如何打開安卓手機的隱藏空間 發布:2024-11-19 21:09:46 瀏覽:885
c語言strncmp 發布:2024-11-19 21:06:26 瀏覽:767
計算機二級c語言考點 發布:2024-11-19 21:05:08 瀏覽:767