微软不支持C开发Win32原因剖析,及C语言在系统开发中的优势

微软不支持用C来开发Win32的原因,简单来说有3点:

1、C并不是应用开发语言

2、微软有C++类库MFC

3、微软甚至也不支持普通用户C++

下面我们分条阐述。

你静下心来,认真细密地去观察,就能够发觉,Windows的系统开发接口,也就是API,它是由来采用C语言予以提供的。

为什么会这样?

不光是Windows,Linux有着相同作为,MacOS也是这般行径,因为都是如此做法。

几乎所有当下的操作系统,其首选是C语言。一方面,C语言对内存分配能够实施极为精细的控制,进而可以确保系统速度。另一方面,C语言与汇编指令相混合搭配,能直接对硬件进行操作。

单单以系统接口这一角度而言,C 所展现出来的接口于进行链接期间,绝对可以确保不会出现改变的情况,并且其展现良好的的兼容性是处于最佳状态的。

在Windows刚开始发布的那段时期,微软所采取的做法是,让人们运用C语言的那种方式去编写程序。

很快,人们发现了一个问题。

输出"Hello World"这个简单内容的GUI窗口类程序,所需的程序行数在50至80行之间,是这样的情况。

大概如下:

plaintext 复制代码
#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 = L"HelloClass";
    RegisterClass(&wc);
    // 2. 创建窗口
    HWND hwnd = CreateWindow(
        L"HelloClass",           // 窗口类名
        L"Hello 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,摇身一变,成为了这般模样:

plaintext 复制代码
#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"的函数,乃是为其去撰写与之相对应的功能的哟。

这般的界面,着实特别地契合"直觉",一下子使得使用的难度降低了九成,致使一个平常的用户也能够迅速地学会Windows开发了。

于是,微软就作出了分级。

普通用户,用Visual Basic来编程。

拥有高级功能,像是编写用户控件就要运用原来的Visual C++,交由高级用户去达成,与此同时,存在一些系统级别的功能,是以ActiveX、COM组件的形式予以提供,这同样能够让高级用户来完成。

经过这种"高加上低"的搭配方式,Windows的开发格局就这样被确定了下来。

确实,在Java被研发出来以后,微软推出了C#,取代了VB所占的地位。

当下,Windows平台所进行的开发,似乎略带有几分"日薄西山"这样的意味了,更多的情形是借助Web技术,经由Electronic这种具备跨平台特性的技术加以编写。

想想过去那些Windows开发的岁月,让我想起了一首词。

它源自明代才华出众的杨慎所创作的《临江仙·滚滚长江东逝水》,其所述内容如下。

plaintext 复制代码
滚滚长江东逝水,
浪花淘尽英雄。
是非成败转头空。
青山依旧在,
几度夕阳红。
白发渔樵江渚上,
惯看秋月春风。
一壶浊酒喜相逢。
古今多少事,
都付笑谈中。

IT的江水滚滚向前,那里面有多少人的青春岁月啊!

我是明月,

一个互联网IT人!

相关推荐
爱编码的小八嘎4 小时前
C语言完美演绎7-16
c语言
水云桐程序员4 小时前
一个GCC编译C语言命令的执行过程和错误输出:目录不存在:当前目录下没有output子目录|C语言编译的解决办法|Visual Studio Code
c语言·开发语言·vscode
努力的小帅4 小时前
蓝桥杯——入门
c语言·单片机·蓝桥杯
网域小星球5 小时前
C 语言从 0 入门(二十一)|typedef 类型重定义:简化复杂类型,代码更清爽
c语言·算法·类型重定义·结构体简化·函数指针简化
weixin_446023565 小时前
c语言第一个编译器是用什么语言写的?自举原理
c语言·编译器·迭代优化·无代码开发平台·自举原理
脑神5 小时前
C/C++语言编译器
c语言
♛识尔如昼♛6 小时前
C 基础(9) - 数组和指针
c语言·指针·数组·多维数组
计算机安禾6 小时前
【数据结构与算法】第45篇:跳跃表(Skip List)
c语言·数据结构·算法·list·排序算法·图论·visual studio
水饺编程7 小时前
第5章,[标签 Win32] :GDI 的基本图形
c语言·c++·windows·visual studio