C/C++ 程序的入口选择

我们知道用 VC 编写的程序,运行的时候是需要 C/C++ 运行库支持的。当我们运行一个 C/C++ 程序的时候,链接器会首先寻找应用程序的启动函数,例如: 

如果你建立了一个 console 程序的话,编译器的链接开关会是以下这种形式: 

        /subsystem:"console" /entry:"mainCRTStartup" (ANSI) 
        /subsystem:"console" /entry:"wmainCRTStartuup" (UNICODE) 

如果你建立了一个win32 application,编译器的链接开关则会是以下形式: 

        /subsystem:"windows" /entry:"WinMain" (ANSI) 
        /sbusystem:"windows" /entry:"wWinMain" (UINCODE) 

上面的两种形式可以在 Project –> Properties -> Configuration Properties –> Linker -> System (VS2005/08)中看到,其中的 subsystem 和 entry 并不需要都设置,如果你只设置了 /subsystem:"console" 的话,那么默认的 entry 开关应为 /entry:"mainCRTStartup";反之,如果你在应用程序中定义了 main 函数的话,默认情况下,你的 /subsystem 开关应该为 /system:"console"。 

在默认情况下,/subsystem 和 /entry 开关是匹配的,也就是 console 对应 mainCRTStartup 或者 wmainCRTStartup;windows 对应 WinMain 或者 wWinMain。 

但是我们也可以通过手动改动的方式使他们不匹配,例如我们可以这样改动: 

        #pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" )   // 设置入口地址 

        int main(int argc, char* argv[]) 
        { 
          MessageBox(NULL, "hello", "Notice", MB_OK); 
          return 0; 
        } 

在默认情况下,链接器看到 /subsystem 下是 windows 选项的时候,它会自动寻找 WinMain 或者 wWinMain, 
但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!

上面是在代码中使用 #pragma 指令来设置,还有一种就是直接在开发环境的Project –> Properties -> Configuration Properties –> Linker -> System 中手工改动!


转载自http://blog.csdn.net/chenyusiyuan/article/details/4618962

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值