当前位置:首页 » 编程软件 » 混合编译法

混合编译法

发布时间: 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 21:32:10 浏览:358
外交官拉杆箱怎么设密码 发布:2025-02-08 21:21:55 浏览:797
vivo手机z系列哪个配置性价比最高 发布:2025-02-08 21:17:43 浏览:10
什么是白标和服务器 发布:2025-02-08 21:15:50 浏览:481
租完服务器怎么搭建ip 发布:2025-02-08 21:11:47 浏览:394
c语言赋值后 发布:2025-02-08 21:08:40 浏览:757
dosphp 发布:2025-02-08 21:01:27 浏览:703
sm3杂凑算法 发布:2025-02-08 20:55:00 浏览:286
抽奖源码带后台 发布:2025-02-08 20:33:54 浏览:226
欧博中央空调原始密码是多少 发布:2025-02-08 20:33:47 浏览:336