當前位置:首頁 » 編程軟體 » 混合編譯法

混合編譯法

發布時間: 2022-07-11 11:27:59

A. 是否能在keil中混合編譯c和c++程序

keil中支持混合編譯C和C++程序, 因為其本質最終都是編譯成匯編,所以是可以同時操作的。

在混合編譯時,需要注意以下幾點:

1、C文件擴展名必須為.C, C++文件擴展名必須為.CPP, 頭文件擴展名必須為.CPP。 如果源文件的擴展名使用錯誤,會導致編譯出錯。

2、c語言的頭文件,需要加上如下條件編譯及限制代碼:

#ifdef__cplusplus
extern"C"{
#endif
//原本的頭文件內容。
#ifdef__cplusplus
}
#endif

其功能為,當使用c++編譯器編譯時,會添加extern "C" {}限制。 這樣才可以使C語言的函數聲明被C++正確識別。

3、所有C++文件中需要被C調用的函數,在定義和聲明時都需要加上

extern "C"

可以是單獨的函數,比如

extern"C"voidfunc_cpp_for_c(void)
{
//...
}

也可以是程序段,比如

extern"C"{
voidfunc1()
{
}
voidfunc2()
{
}
}

4、編譯選項中,C99編譯選項需要去掉。如圖:

B. c語言與匯編語言混合編程編譯器

可以使用asm關鍵字內嵌匯編語言,用VC++就可以

微軟關於該關鍵字的詳述:

__asm關鍵字啟動內聯匯編並且能寫在任何c/c++合法語句之處.它不能單獨出現.它必須接匯編指令、一組被大括弧包含的指令或一對空括弧.術語「__asm 塊」在這里是任意一個指令或一組指令無論是否在括弧內。

以下代碼片段是在括弧內的一個簡單的__asm塊。

__asm

{

mov al, 2

mov dx, 0xD007

out al, dx

}

另一種方法是,你可以在每個匯編指令前放置__asm

__asm mov al, 2

__asm mov dx, 0xD007

__asm out al, dx

因為__asm關鍵字是一個語句分隔符,你也可以將匯編指令放在同一行:

__asm mov al, 2 __asm mov dx, 0xD007 __asm out al, dx

以上三個的例子產生相同的代碼,但是第一種風格(把__asm塊用括弧括起來)有一些優勢。括弧可以清晰的將C或C++代碼和匯編代碼分開,並且避免了不必要的重復__asm關鍵字。括弧也能避免模糊性。如果你想在__asm塊的同一行放置一個C或C++語句,你必須將塊用括弧括

起來。沒有括弧,編譯器不能告訴匯編代碼在哪裡停止而C或C++代碼在哪裡開始。最後,因為在括弧的文字有和原始MASM一樣的格式,你能輕松的從一個已有的MASM源文件里剪切和黏貼文字到文件來。

不同於C和C++的括弧,包含__asm塊的括弧對變數的作用域並沒有效果。你也能嵌套__asm塊,嵌套對變數作用域也沒有效果。

C. C++ C混合編譯

C文件中 不能使用c++ 關鍵字。
但是你可以使用c++ 編譯器 編譯c文件。
gnuc c 支持標准c 使用-ansi 使用ansi 標准。
使用:-std 選項設置iso標准。
『-std=c89』 or 『-std=iso9899:1990』-- The original ANSI/ISO C language standard
『-std=iso9899:199409』-- The ISO C language standard with ISO Amendment 1, published
in 1994.
『-std=c99』 or 『-std=iso9899:1999』-- The revised ISO C language standard,
published in 1999 (ISO/IEC9899:1999).
『-std=gnu89』 and 『-std=gnu99』. -- for GNU extensions

-----

條件編譯就使用:

#ifdef XXX
XXX
#else

#endif

#ifndef XXX
XXX
#else
#endif
系統頭文件和編譯器預定義了一些宏使得可以使用ifdef 判斷系統狀態。

D. 怎麼在XCode下混合編譯Objective-C++/Objective-C

使用C++庫的OC代碼保存成.mm文件即可。
如果還不行,再嘗試修改下編譯選項:
Apple LLVM compiler 4.1 - Language
C++ Standard Library --> libc++(LLVM C++ standard with C++11 support)

E. VB,JS,C#,c++如何在VS中混合編譯

在同一個solution裡面,增加超過一個project,每個都選用個別語言的project。

之後,如C#要和VB混合,C#的project就需要加入VB的project的reference里頭。反過來也可以。

F. c語言和匯編語言混合之和如何編譯連接

如果你是想在一個文件里混寫c語言和arm匯編,這個跟編譯器有關系,如果你用gcc,可以用__asm__語法,請自行搜索__asm__相關資料

另一種方法,就是arm匯編文件和c語言文件分開來寫,在c語言中聲明函數符號即可。然後分別編譯後再用鏈接器鏈到一起
請參考

G. 如何在XCode下混合編譯Objective-C++/Objective-C

xcode下的混編,指的的是 C++和 objc之間。而混編的原理就是xcode帶了一個 Objective-C++的編譯器。
這個編譯器默認是以 .mm 為後綴的文件為准,所以只要將文件後綴改成.mm,使用的編譯器就是這個編譯器。.mm的文件中,可以在objc和C++的代碼中互相調用嵌套。
比如objc的類裡面嵌入一個C++的類作為成員,反過來也可以,代碼嵌套調用也是可以的。

H. 微指令的編譯方法有哪些

直接編碼(直接控制)方式、欄位直接編碼方式、欄位間接編碼方式、混合編碼、其他(常數欄位)。特點:直接編碼速度快,但控存容量極大;欄位直接編碼縮短了微指令的長度,但是增加了解碼電路。

微指令是指在機器的一個CPU周期中,一組實現一定操作功能的微命令的組合,描述微操作的語句。微命令是指控制部件通過控制線向執行部件發出各種控制命令。操作微指令是描述受控電路的操作語句 , 分支微指令是描述控制電路的分支語句。

一條機器指令的功能是若干條微指令組成的序列來實現的,即一條機器指令所完成的操作分成若干條微指令來完成,由微指令進行解釋和執行,這個微指令序列通常叫做微程序。

微指令的編譯方法是決定微指令格式的主要因素。考慮到速度,成本等原因,在設計計算機時採用不同的編譯法 。因此微指令的格式大體分成兩類:水平型微指令和垂直型微指令。

I. 怎麼用KEIL混合編譯C和匯編,請具體點,網上那些說法都不能用,不會的別來

首先,把「C51S.LIB」加入工程,如圖所示,雙擊SourceGroup1,在「..KeilC51LIB」下找到「C51S.LIB」,把它加入到工程。(記著文件類型是.LIB的,別說你的沒有)。再次也是最後一步,在#pragmaasm與#pragmaendasm之間加入你要的匯編代碼。

熱點內容
網吧怎麼通過伺服器玩網路游戲 發布:2025-02-08 19:59:52 瀏覽:912
文檔編輯加密 發布:2025-02-08 19:56:31 瀏覽:390
phpmysql存儲過程實例 發布:2025-02-08 19:54:40 瀏覽:159
淘寶賣的地下城腳本 發布:2025-02-08 19:41:40 瀏覽:61
安卓怎麼把提升畫質關了 發布:2025-02-08 19:40:11 瀏覽:359
我想你加密 發布:2025-02-08 19:39:24 瀏覽:212
java手機號正則表達式 發布:2025-02-08 19:34:50 瀏覽:352
ue加密 發布:2025-02-08 19:34:05 瀏覽:476
滁州壓縮機 發布:2025-02-08 19:34:03 瀏覽:882
壓縮棉花絮片 發布:2025-02-08 19:33:12 瀏覽:394