__declspec(naked) void printfive() {
int i = 5;
printf("%i\n", i);
}
出于某种原因,这段代码有效,但我不明白i
存储在哪里?在调用函数的框架中?它成为全局变量?如果它存储在调用者的框架中,那么编译器如何知道位移,因为您可以printfive()
从具有不同框架大小和局部变量的不同函数中调用。如果它是全局的,或者类似的东西static
,我已经尝试递归,我可以看到变量没有改变,它确实不是真正的本地。但这很明显,没有入口代码(序言)。好的,我明白了,没有序言,没有框架,没有寄存器更改,但这是值,但是范围会发生什么?此说明符的行为是否在任何参考中定义?这还是 C++ 标准的一部分吗?如果您主要使用这种功能,那就太好了asm {}
在它们内部,(或使用 asm 调用它们并希望确保函数没有过度优化),但您可以与 C++ 混合使用。但这是一种脑筋急转弯。