當前位置:首頁 » 編程軟體 » 預編譯是在哪裡完成的

預編譯是在哪裡完成的

發布時間: 2022-04-18 05:25:36

A. 初學c語言時,輸入程序後運行,是執行還是預編譯預編譯是什麼為什麼最開始要有#include如

預編譯是把一個工程中較穩定的代碼預先編譯好放在一個文件里.這些預先編譯好的代碼可以是任何的C/C++代碼。而輸入程序後的運行,只是將代碼編譯成了obj(object)文件,所有obj文件經鏈接(link)成為可執行文件。而你說的執行,應該就是點擊最後生成的.exe文件了。開始要有的#include,是表明要包含的頭文件,或者其它的保存的代碼文件。只有這樣,你才可以引用到那個文件中的代碼,來供目前的文件來使用。
至於你說的什麼大型游戲的編程,應該也是這樣的一套,因為C語言就是上述生成文件的套路。游戲的編程,初學的話可以建議看《游戲編程入門》( 美 哈本),這本書基於windows平台,是為幾乎沒有游戲開發經驗的初學者寫的,循序漸進,從2D講到3D 的一些基本技術,其中的例子也非常經典,看完書基本就可以做出不錯的2D 游戲了,也有了一定的3D基礎了,之後再看一些深入的書籍像《Windows游戲編程大師技巧》。

B. c語言,編譯、預編譯區別

預編譯又叫預處理是在編譯之前完成的事情,主要是完成宏替換、文件包含和條件編譯的處理
處理完的結果還是C程序,不是機器語言
而編譯就是要把C語言的程序變成機器語言了

C. Android 怎麼簡單實現預編譯

可以巧妙地利用常量來實現類似的功能。編譯的時候,一般會把常量進行硬編碼,並把不能抵達的代碼進行刪減。因此,我們有了下面類似的代碼:


[java]

public final static boolean IsDebug= false;

if(IsDebug){
Log.i(tag,msg);
}


可以對編譯後的文件,進行反編譯

D. 以下哪些行為是在c++語言編譯含預處理時完成的

所謂預處理是指在進行編譯的第一遍掃描(詞法掃描和語法分析)之前所作的工作。預處理是C語言的一個重要功能, 它由預處理程序負責完成。當對一個源文件進行編譯時, 系統把自動引用預處理程序對源程序中的預處理部分作處理, 處理完畢自動進入對源程序的編譯。

C語言提供了多種預處理功能,如宏定義、文件包含、 條件編譯等。合理地使用預處理功能編寫的程序便於閱讀、修改、 移植和調試,也有利於模塊化程序設計。

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. 預處理是在編譯之前完成的是什麼意思 是在我按下編譯按鈕之前

呵呵,當然不是。
我來描述一下當你按下IDE,即集成開發環境中的編譯按鈕的時候,後台發生了什麼,你就會明了。
我們所說的編譯,比較籠統。嚴格或者說是原始意義上的編譯是指將源代碼翻譯成機器二進制碼。其實真正完成從源代碼到機器碼,要分為幾個階段的,具體情況要看是什麼語言,還有編譯器提供的擴展性特性。但是一般情況下都包含一下幾個階段;

首先,是預編譯。這時候不是真正的編譯,而是預處理,比如說進行宏展開。
接著就是編譯。這是比較粗糙的說法,因為編譯階段也可以分為詞法分析、語法分析、語言分析、中間代碼產生、代碼優化、產生機器碼等階段,這個是編譯原理課程的內容。

所以當你按下編譯按鈕的時候,編譯環境會進行預編譯,然後才是真正的編譯。

現代的圖形界面集成開發環境的出現和流行,使得編譯的過程往往被很多人所忽視。

any questions?

G. mysql怎麼實現預編譯

玩Oracle的都比較關注shared pool,特別是library cache,在使用了綁定變數(預編譯sql)之後確實能得到很大的性能提升。現在在轉Mysql之後特別是innodb很多東西都還能和Oracle對得上號的,就像innodb_buffer_pool_size類似於Oracle的database buffer cache,innodb_log_buffer_size類似於redo log buffer,但是innodb_additional_mem_pool_size僅僅類似於shared pool的Data dictionary cache,似乎還缺少和library cache相對應的東西。那就有一個問題了,在Mysql裡面使用預編譯的sql還會有性能提升嗎?

這里我用Java的jdbc做了一下測試,分別用Statement和PreparedStatement執行1000個sql,並運行10次

1.使用Statement做硬解析:

結果如下:

elapsed time(ms):14773
elapsed time(ms):16352
elapsed time(ms):14797
elapsed time(ms):15800
elapsed time(ms):12069
elapsed time(ms):14953
elapsed time(ms):13238
elapsed time(ms):12366
elapsed time(ms):15263
elapsed time(ms):13089
average time(ms):14270

可以看出兩種方式執行的結果幾乎相同,不像Oracle差距那麼大。而且就算是用PreparedStatement的方式,在Mysql資料庫端抓出來的sql語句也不是以變數id=?的形式出現的,而是實際的數值。後來在網上看到在連接字元串上加上useServerPrepStmts=true可以實現真正的預編譯

String url="jdbc:mysql://172.16.2.7:3306/testdb"; url=url+"?useServerPrepStmts=true";

加上這段後可以在資料庫端可以看到明確的結果:

mysql> show global status like 'Com_stmt_prepare';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Com_stmt_prepare | 11 |
+------------------+-------+
1 row in set (0.00 sec)

但是實際的運行結果和上面幾乎一樣,性能上也沒有任何的提升。由此可以推斷出Mysql由於缺少類似於Oracle的library cache的部件,因此採用預編譯方式執行sql是沒有性能上的提升的。

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

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

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

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

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

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

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

(8)預編譯是在哪裡完成的擴展閱讀:

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

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

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

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

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

I. VS2005的預編譯是怎麼實現的·~

在vs2005中有生成網站的菜單,但這樣生成的文件aspx的文件還是能夠看到代碼,通過手工的預先編譯,則可以完全把整個站點保護起來。

在命令提示符下進入:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>

然後鍵入預編譯命令:aspnet_compiler -v /test -p "d:/***" "e:/***"

d:/***是指的你要編譯的站點

e:/***指得是你編譯好後存放的路徑,沒有該路徑就自動生成

很爽吧,代碼全部保護起來了,什麼也看不到。。。

不過用反編譯工具還是能讀出來的。

注意:編譯好的文件中的空文件夾丟失,比如你要放用戶上傳的文件的文件夾,自己補一下吧!

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/jhtyt/archive/2006/05/09/713843.aspx

熱點內容
光遇國際服安卓和蘋果如何互通 發布:2025-03-19 01:43:03 瀏覽:316
如何加密應用 發布:2025-03-19 01:42:04 瀏覽:617
lol伺服器人數怎麼擠 發布:2025-03-19 01:29:19 瀏覽:838
兄弟連的php 發布:2025-03-19 01:24:25 瀏覽:810
自己做腳本可不可以 發布:2025-03-19 01:20:13 瀏覽:533
33的源碼值 發布:2025-03-19 01:13:25 瀏覽:814
虛榮安卓怎麼充值 發布:2025-03-19 01:12:27 瀏覽:892
如何更改報考密碼 發布:2025-03-19 01:08:12 瀏覽:416
python日期類型 發布:2025-03-19 01:02:28 瀏覽:415
android飛機大戰源碼 發布:2025-03-19 00:56:52 瀏覽:736