__declspec(naked) void printfive() {
int i = 5;
printf("%i\n", i);
}
由于某些原因,此代码有效,但我不明白i
存储在哪里?在调用函数的框架中?它变成全球变量?如果它存储在调用者的框架中,那么编译器如何知道位移,因为您可以使用具有不同帧大小和局部变量的不同函数调用printfive()
。如果它是全球性的,或者像static
也许,我试图去递归,我可以看到变量没有改变,它确实不是真正的本地。但很明显,没有入门代码(序言)。好吧,我明白,没有序言,没有框架,没有寄存器改变,但这是值,但范围?此说明符的行为是否在任何参考中定义?无论如何,这是C++标准的一部分吗?如果你主要在里面使用asm {}
(或者使用asm来调用它们,并希望确保函数没有被优化),那么这种功能非常棒,但是你可以和C++混合使用。但这是一种令人费解的情绪。函数声明__declspec(naked)如何存储局部变量?
你使用什么编译器? –
“无论如何,这是C++标准的一部分吗?”不,你究竟想要达到什么目标?你的目标是什么?你为什么希望编写一个没有序言/ epilog的函数? –
我正在实现类似于第四种线程的代码语言,每个原语都是汇编程序或C函数。大多数是asm,但有时C代码更容易阅读,裸函数并不是注册表。 – exebook