vlambda博客
学习文章列表

弃用MSVC编译器,使用跨平台编译器CLang,让我们学习C语言更加规范

视频讲解:https://www.bilibili.com/video/BV1zf4y1y7YS/

MSVC和CLang编译器都是支持UTF8编码的,也就是说是支持中文命名方式的.

下面说一下他们之间的区别吧!

生成最终文件编码不同

MSVC不管源C文件是GBK还是UTF8编码,生成的exe文件都是GBK的.而windows控制台本身就是GBK编码,所以一般不会出错.

CLang生成的最终exe文件编码是根据源C文件编码而定的,如果源C文件是GBK,就生成GBK的.如果源C文件是UTF8的就生成UTF8的.但GBK的源C文件不支持中文命名,我们需要使用英文命名方案,这无形增加我们的学习成本.一般使用UTF8的源C文件编码即可,完美支持中文命名方案.

错误或警告提示

在源C文件为UTF8的情况下,Clang的错误提示更加严格,但提示都是英文的,不过没有关系,翻译一下即可.(完美支持最新C/C++标准).

MSVC的错误提示不是很智能,很多错误提示都显示不出来,不利于学习C标准(MSVC对C/C++标准支持不完善).

兼容性

MSVC有很多老的项目都可以正确在win7系统上运行,win10也是没有问题的,但不支持Linux和MAC系统.

CLang兼容性没有MSVC好,如"firefox浏览器"使用的是Clang编译的,在win7系统下运行不怎么好,在win10无问题,但它支持linux和MAC系统.

这样子说并不代表CLang不支持win7,它不仅完美支持win7还支持XP,只是由于我们在编辑软件的时候使用的是win10的SDK,自然对win7不友好.

如:OBS Studio在win7系统下兼容性不怎么好,且win7已经停止更新了,更多的人会选择win10.只是由于很多人不会优化win10,导致体验不好.

Clang兼容GCC和MSVC的标准代码,反过来GCC不兼容CLang,MSVC也是不兼容Clang的标准代码的.[Clang支持windows/linux/mac平台]

MSVC只支持Windows平台,且只对C++和Windows SDK支持友好,像C或其他东西,支持的效果不行.

另外说一下GCC这个编译器,真正的全能,几乎支持所有语言,但由于支持的太多了,生成效率和运行速度不如MSVC和Clang.

Debug和Release文件大小

Debug调试的时候,生成的文件体积,MSVC的大小是CLang的是1.5倍,我们测试了MFC和控制台应用都是这样子.

Release方面,由于MSVC和Clang编译器底层都是使用的Windows专用的CL编译,体积MSVC比Clang只大1kb,几乎可以说是相同的大小.

所以Clang更多的体现是在调试Debug的时候,可以更有效的发现问题并去解决,节省了非常宝贵的时间.