你认为具体是做-nostartfiles
什么的?
它抑制 CRT 初始化,其中包括调用全局构造函数。如果没有全局构造函数,cout
则不会初始化。没有初始化,你的程序就会运行起来。
为什么还要搞这个呢?只链接一个小样板会不会更容易main
?它可能看起来像这样:
// app.hpp
class App {
protected:
App();
virtual ~App();
private:
virtual int run(/*args if you want them*/) = 0;
int startup(/*args if you want them*/);
friend int app_run(/*args if you want them*/);
};
// app.cpp: just add this to your project
namespace { App* the_app; }
App::App() { the_app = this; }
App::~App() {}
int App::startup() {
// Add whatever code you want here, e.g. to create a window.
return run();
}
int app_run() { return the_app->startup(); }
int main() { return app_run(); }
int wmain() { return app_run(); }
int WinMain(HINSTANCE, HINSTANCE, char*, int) { return app_run(); }
int wWinMain(HINSTANCE, HINSTANCE, WCHAR*, int) { return app_run(); }
现在只需从 App 派生主类并添加该类型的全局对象。