混合編譯法
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之間加入你要的匯編代碼。