混合编译法
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之间加入你要的汇编代码。