預編譯注釋
1. 預處理
首先源代碼文件(.c/.cpp)和相關頭文件(.h/.hpp)被預處理器cpp預編譯成.i文件(C++為.ii)。預處理命令為:
gcc –E hello.c –o hello.i
預編譯過程主要處理那些源代碼中以#開始的預編譯指令,主要處理規則如下:
u 將所有的#define刪除,並且展開所有的宏定義;
u 處理所有條件編譯指令,如#if,#ifdef等;
u 處理#include預編譯指令,將被包含的文件插入到該預編譯指令的位置。該過程遞歸進行,及被包含的文件可能還包含其他文件。
u 刪除所有的注釋//和 /**/;
u 添加行號和文件標識,如#2 「hello.c」 2,以便於編譯時編譯器產生調試用的行號信息及用於編譯時產生編譯錯誤或警告時能夠顯示行號信息;
u 保留所有的#pragma編譯器指令,因為編譯器須要使用它們。
2. 編譯
編譯過程就是把預處理完的文件進行一系列詞法分析,語法分析,語義分析及優化後生成相應的匯編代碼文件(.s)。編譯的命令為:
gcc –S hello.i –o hello.s
或者從源文件直接輸出匯編代碼文件:
gcc –S hello.c –o hello.s
現在版本的GCC把預編譯和編譯兩個步驟合並成一個步驟,由程序cc1來完成(C++為cc1plus)。
3. 匯編
匯編就是將匯編代碼轉變成機器可以執行的命令,生成目標文件(.o),匯編器as根據匯編指令和機器指令的對照表一一翻譯即可完成。匯編的命令為:
gcc –c hello.s –o hello.o
或者從源文件直接輸出目標文件:
gcc –c hello.c –o hello.o
4. 鏈接
鏈接就是鏈接器ld將各個目標文件組裝在一起,解決符號依賴,庫依賴關系,並生成可執行文件。鏈接的命令為:
ld –static crt1.o crti.o crtbeginT.o hello.o –start-group –lgcc –lgcc_eh –lc-end-group crtend.o crtn.o
一般我們使用一條命令就可以完成上述4個步驟:
gcc hello.c
實際上gcc只是一些其它程序的包裝,它會根據不同參數去調用預編譯編譯程序cc1、匯編器as、鏈接器ld。
B. 源代碼怎麼用的
不知道你玩的啥游戲,但是看樣子估計是c++代碼,我英文學的不好x0dx0a從英文描述中我猜測這是v c++的代碼,「//」在代碼中表示注釋,前三行是注釋,其大意如下:x0dx0a stdafx.cpp :源文件,包括剛才的標准單元?x0dx0a fixyou.pch將是預編譯的標題 x0dx0a stdafx.obj將包含預編譯的類型信息x0dx0a「cpp」明顯是c++源碼文件的縮寫名,而最後一行是頭文件。x0dx0a所謂頭文件預編譯,就是把一個工程(Project)中使用的一些MFC標准頭文件(如Windows.H、Afxwin.H)預先編譯,以後該工程編譯時,不再編譯這部分頭文件,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。 x0dx0ax0dx0a預編譯頭文件通過編譯stdafx.cpp生成,以工程名命名,由於預編譯的頭文件的後綴是「pch」,所以編譯結果文件是projectname.pch。 x0dx0ax0dx0a編譯器通過一個頭文件stdafx.h來使用預編譯頭文件。stdafx.h這個頭文件名是可以在project的編譯設置里指定的。編譯器認為,所有在指令#include "stdafx.h"前的代碼都是預編譯的,它跳過#include "stdafx. h"指令,使用projectname.pch編譯這條指令之後的所有代碼。 x0dx0ax0dx0a因此,所有的CPP實現文件第一條語句都是:#include "stdafx.h"。x0dx0a其實我學的pascal,所以對c++了解的少,如果你真的想學會他,還是自己找幾本c++的書學一下,這樣才能「使用」代碼得心應手。
C. 我想問一下C語言宏注釋和/* //注釋有什麼區別
預編譯與注釋是不一樣的概念。代碼文本在進行編譯時,首先排除了注釋。然後根據預編譯條件進行篩選排除或選擇分支。就象宏,編譯前首先替換宏,再進行編譯。預編譯和宏都是為了更高效率的代碼編寫和方便修改而存在的,不是為程序運行時准備的。
#if #endif 功能相當於if(){};只不過預編譯是在代碼編譯前已經選擇,條件選擇是在運行時進行選擇而已。
D. C++中的注釋,如//和/* */的注釋內容,會參與編譯嗎即反編譯時會被看到嗎
這個建議在CSDN技術專區裡面找到答案。
(4)預編譯注釋擴展閱讀:由硬體系統和軟體系統所組成,沒有安裝任何軟體的計算機稱為裸機。可分為超級計算機、工業控制計算機、網路計算機、個人計算機、嵌入式計算機五類,較先進的計算機有生物計算機、光子計算機、量子計算機等。計算機發明者約翰·馮·諾依曼。計算機是20世紀最先進的科學技術發明之一,對人類的生產活動和社會活動產生了極其重要的影響,並以強大的生命力飛速發展。它的應用領域從最初的軍事科研應用擴展到社會的各個領域。
E. 在java中如何實現預編譯
/*
* ProCompile.java *預處理要編譯的文件,刪除多餘的空白,注釋,換行,回車等
* Created on 2007年9月18日, 下午8:58 */ package javacompile; import java.io.*;
import java.util.regex.*;
import javax.swing.JOptionPane; /** * @com.junjian.sun public class PerCompile { File f = null;
String fileString = null;
Pattern p = null;
Matcher m = null;
String regex; //正則表達式 //初始化p
public PerCompile() {
regex ="(//.+)" + //(//.+) 對應單行注釋
//"|(/\\*(.+\\n)+\\*/)"+ // 想對應多行注釋... "|(\\r\\n)" + "|(\\n)"+//(\\r\\n)|(\\n)對應換行
"|(\\B\\s+)" ; // 空白符
String ss;
f = new File(new JOptionPane()
.showInputDialog("請輸入文件所在路徑~"));
try {
BufferedReader bf = new BufferedReader(new FileReader(f));
ss = bf.readLine()+"\n";
fileString = ss; //如果沒有這兩句,ss的開頭會有「null」
while((ss = bf.readLine())!= null){
fileString += ss+"\n"; bf.close();
} catch (IOException ex) {
ex.printStackTrace(); p = Pattern.compile(regex);
m = p.matcher(fileString); //執行替換所有多餘空行,空白符,注釋
void Dels(){
System.out.println("before: "+fileString);
if(m.find()) System.out.println("find!!");
System.out.println(m.replaceAll("")); } }
-
F. android.mk 怎麼注釋
注釋的方式是使用#這個符號,如下代碼:
#8 預編譯宏
# define the macro to compile through support/zip_support/ioapi.c
LOCAL_CFLAGS := -DUSE_FILE32API
LOCAL_EXPORT_CFLAGS := -DUSE_FILE32API
#9 聲明生成靜態庫
include $(BUILD_STATIC_LIBRARY)
#10 添加外部導入庫目錄
$(call import-add-path,$(LOCAL_PATH))
#11 添加導入庫(基於上一行添加的導入庫目錄)
G. 程序進行預編譯處理時將每個注釋替換為一個空格是什麼意思,有什麼用
編譯時 注釋部分不產生目標代碼,注釋對運行不起作用。注釋只是給人看的,而不是讓計算機執行的!