VC修改了入口主函数,全局对象不构造问题?

FrankSun80 2015-07-21 11:34:47
问题描述:VC2013新建Win32 Console Application,全部代码如下,

// ConsoleApplication2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

class CWidget
{
public:
CWidget()
{
_tprintf(_T("widget()\n"));
}
~CWidget()
{
_tprintf(_T("~widget()\n"));
}
};

CWidget widget;

int _tmain(int argc, _TCHAR* argv[])
{
_tprintf(_T("Hello World.\n"));
return 0;
}


编译运行,一切正常。运行结果为:
widget()
Hello World.
~widget()
Press any key to continue . . .


接下来修改项目属性,Linker-> Advanced-> Entry Point 设为 my_main,并对应的修改主函数名,修改后的代码如下,

// ConsoleApplication2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

class CWidget
{
public:
CWidget()
{
_tprintf(_T("widget()\n"));
}
~CWidget()
{
_tprintf(_T("~widget()\n"));
}
};

CWidget widget;

int my_main(int argc, _TCHAR* argv[])
{
_tprintf(_T("Hello World.\n"));
return 0;
}


编译,链接,有警告如下:
1>ConsoleApplication2.obj : warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators
1>MSVCRTD.lib(atonexit.obj) : warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators

运行结果为:
Hello World.
Press any key to continue . . .

可以看到,全局对象的构造函数和析构函数都没有调用。那么问题来了,如果我想修改主函数的名称,同时又希望全局对象像以前正常构造析构,该怎么做呢?
...全文
166 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
king191923157 2015-07-21
  • 打赏
  • 举报
回复
https://msdn.microsoft.com/en-us/library/708by912%28VS.71%29.aspx
赵4老师 2015-07-21
  • 打赏
  • 举报
回复
“修改主函数名称”是一个伪需求。 请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。 意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。 试对比 图书馆(对图书的分类够结构化了吧) 和 搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索) 哪个处理信息更方便、更高效。 所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。 结构越复杂,越难修改,越难除错。 有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。 程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧