我一直认为printf()在最后一步中使用内联汇编定义函数.在stdio.h的内部深处埋藏了一些asm代码,它实际上告诉CPU要做什么.例如,在dos中,我记得它是通过首先mov将字符串的开头添加到某个内存位置或寄存器而不是调用intterupt来实现的.
但是,由于Visual Studio的x64版本根本不支持内联汇编程序,因此我想知道在C/C++中根本不会有汇编程序定义的函数.库函数如何printf()在不使用汇编代码的情况下在C/C++中实现?什么实际执行正确的软件中断?谢谢.
我刚开始用c ++学习windows编程.我有这个疯狂的形象,win32编程基于调用windows函数并向它们发送参数.就像,当你想创建窗口时,你调用一些处理Windows GUI的win32函数并说"嗨,请创建我的新窗口,100 x 100 px,带两个按钮",并且GUI功能说"嗨,没问题"当发生某些事情时,如用户点击一个按钮,我将更改位于此位置的此变量xy".
所以,我认为它与控制台编程非常相似.但是第一条指令让我感到惊讶.我一直认为每个程序首先执行main()函数.因此,当我启动应用程序时,Windows会在堆栈顶部存储一些参数并运行该应用程序.所以我假设初始化main()只是一种c ++方式告诉编译器第一条指令应该在哪里.
但是在win32编程中,有一个名为WinMain()的函数首先启动.所以我有点困惑.我认为规则是编译器必须有main()开始,main只是定义它的起始位置,就像一些起始点标识符.
那么,请问为什么WinMain()函数而不是main()?当我认为C++编程与汇编程序一样合理时,它又让我感到困惑.