为什么微软鼓励使用C++进行win32开发,而好像不支持C语言?

张开发
2026/4/21 4:12:32 15 分钟阅读

分享文章

为什么微软鼓励使用C++进行win32开发,而好像不支持C语言?
微软不支持用C来开发Win32的原因简单来说有3点1、C并不是应用开发语言2、微软有C类库MFC3、微软甚至也不支持普通用户C下面我们分条阐述。仔细观察你会发现Windows的系统开发接口API就是用C语言提供的。为什么会这样因为不只是WindowsLinux和MacOS都是一样的做法。C语言是几乎所有现在操作系统的首选。一方面C语言能够非常精细控制内存分配能够保证系统速度。另外一方面C语言跟汇编指令混搭直接操作硬件。从系统接口这个角度C暴露的接口在link的时候能够保证不改变兼容性最好。在Windows发布的早期微软就是让人们来使用C语言方式来写程序。很快人们发现了一个问题。一个简单的输出“Hello World“的GUI窗口程序就需要50-80行程序。大概如下#include LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 1. 注册窗口类 WNDCLASS wc {0}; wc.lpfnWndProc WndProc; wc.hInstance hInstance; wc.hbrBackground (HBRUSH)(COLOR_WINDOW 1); wc.lpszClassName LHelloClass; RegisterClass(wc); // 2. 创建窗口 HWND hwnd CreateWindow( LHelloClass, // 窗口类名 LHello World, // 窗口标题 WS_OVERLAPPEDWINDOW, // 窗口样式 CW_USEDEFAULT, // X位置 CW_USEDEFAULT, // Y位置 400, // 宽度 300, // 高度 NULL, // 父窗口 NULL, // 菜单 hInstance, // 实例句柄 NULL); // 附加参数 if (!hwnd) return -1; // 3. 显示窗口 ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // 4. 消息循环 MSG msg; while (GetMessage(msg, NULL, 0, 0)) { TranslateMessage(msg); DispatchMessage(msg); } return msg.wParam; }在上面的程序中有大量的重复性代码但Windows需要包括1、注册窗口类2、创建窗口3、显示窗口4、窗口消息处理5、窗口退出函数没错这个也要写也就是说Windows虽然是一个使用者很方便点点鼠标就可以用的“友好”系统但Windows编程却并不是一个好差事而是需要书写大量的代码才能弄好Windows编程。对于编程人员来说特别是Windows早期很多Dos编程人员就是在这个阶段离开了编程因为它实在是太复杂了。这个“断崖式”的离开微软是没有准备的。那一段时间Windows虽然用户火热但开发却让Windows开发人员焦头烂额工作十分困难那怎么办呢微软的路径就是简化代码用当时最流行的C来做到这一点。于是微软就推出了MFC提供了大量的类库和VC这个开发大杀器于是一个hello World变成了这样#include class CMyFrame : public CFrameWnd { public: CMyFrame() { Create(NULL, _T(Hello MFC), WS_OVERLAPPEDWINDOW, CRect(100, 100, 500, 400)); } }; class CMyApp : public CWinApp { public: BOOL InitInstance() { m_pMainWnd new CMyFrame(); m_pMainWnd-ShowWindow(m_nCmdShow); return TRUE; } }; CMyApp theApp;瞬间清爽了很多而且因为有App和Framework两个类的加入代码也非常清新了再加上VC IDE加入了App Wizzard和Class Wizzard以及Resource、Dialog这些可视化的“资源”工具让Windows编程的门槛迅速降低这次稳住了Windows开发的大局。虽然如此但C并没不是一门“容易”的语言对于专业开发人员依然非常困难。哪怕到现在C程序员也不是很多。为了改变现状微软通过收购购买了一家提供“所见即所得”技术的公司开发了后来的Visual Basic。这种开发方式就是提供一个界面这个界面里面我们可以看到一边是一些Windows常用的控件譬如按钮Button、ListBox列表、ComboBox下拉框。用户可以直接用鼠标拖动到中间的空白Windows上面就可以形成界面了。如果想修改按钮Button的标题直接用“属性”窗口就可以了用户双击按钮就可以编写“Button_Clik函数来写对应的功能。这种界面真的是非常符合“直觉”瞬间让使用难度下降了90%让一个普通用户也很快能学会Windows开发了。于是微软就作出了分级。普通用户用Visual Basic来编程。高级功能譬如编写用户控件就用原来的Visual C让高级用户来实现同时有些系统级别的功能通过ActiveX、COM组件的形式来提供这也可以让高级用户来完成。通过这种“高低”搭配Windows的开发格局就这样定了下来。当然Java开发出来之后微软就开发出了C#代替了VB的位置。现在Windows平台的开发有点“日薄西山”的意思更多的是用Web技术通过Electronic这种跨平台技术来编写。想想过去那些Windows开发的岁月让我想起了一首词。它出自明代才子杨慎的 《临江仙·滚滚长江东逝水》内容如下滚滚长江东逝水 浪花淘尽英雄。 是非成败转头空。 青山依旧在 几度夕阳红。 白发渔樵江渚上 惯看秋月春风。 一壶浊酒喜相逢。 古今多少事 都付笑谈中。IT的江水滚滚向前那里面有多少人的青春岁月啊我是明月一个互联网IT人

更多文章