加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

.net – C/C++LI中的内联汇编

发布时间:2020-12-16 10:20:49 所属栏目:百科 来源:网络整理
导读:为什么C/C++LI编译器可以编译此代码: using namespace System;inline void Assembly(){__asm{mov eax,5}}int main(arraySystem::String ^ ^args){ Assembly(); Console::WriteLine(L"Hello World"); return 0;} 并不能为这一个: using namespace System;in
为什么C/C++LI编译器可以编译此代码:

using namespace System;

inline void Assembly(){

__asm{
mov eax,5
}

}

int main(array<System::String ^> ^args)
{

    Assembly();
    Console::WriteLine(L"Hello World");
    return 0;
}

并不能为这一个:

using namespace System;


int main(array<System::String ^> ^args)
{

__asm{
mov eax,5
}
    Console::WriteLine(L"Hello World");
    return 0;
}

解决方法

C/C++LI编译器支持生成机器代码和IL.它将为没有/ clr生效的任何代码或者使用#pragma managed(push,off)和#pragma managed(pop)括起来的函数生成机器代码.或者必须编译为机器代码的函数,因为它们包含无法转换为IL的代码.像_asm一样,请注意第一个片段的C4793警告.使用#pragma managed抑制警告.这样的代码当然不能使用任何托管类型.

代码生成单元是一个功能.什么不能工作是一个需要两者的功能.您的main()函数必须编译为IL,因为它使用托管类型.该功能当然不会内联.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读