【在主画面加入捷径】
       
【选择语系】
繁中 简中

[C 语言] 程序设计教学:如何在终端机中使用 Visual C++

【赞助商连结】

    Visual Studio 内部的 C 编译器为 cl.exe,微软网站有 cl.exe 参数等相关数据 (像是这里)。在大部分情形下,一般程序设计者会透过 Visual Studio 间接使用此编译器,甚少直接从命令行调用该编译器;不过,我们有时会从终端机调用 cl.exe,像是要撰写跨平台的 Makefile 时,就会用到 cl.exe 的命令行参数。此外,熟悉 cl.exe 的参数后,也可在 Visual Studio 中调整相关参数。

    最简单的使用方式如下:

    C:\> cl hello.c
    C:\> .\hello.exe

    本文的目的是整理一些常见的使用情境,一开始没用到的话也不用死背这些指令。

    检查编译器版本

    单独输入 cl 指令可检视该编译器的版本:

    C:\> cl
    Microsoft (R) C/C++ Optimizing Compiler Version 19.13.26131.1 for x64
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    usage: cl [ option... ] filename... [ /link linkoption... ]

    如果在程序讨论区,提供编译器的版本偶尔会得到一些有用的回应。比较简单的替代方法是提供 Visual Studio 的版本。

    开启警告讯息

    理论上,使用 /Wall 参数可以开启所有警告讯息,对修改程序有一些帮助;但 /Wall 会有过多的伪阳性,在实务上其实不好用,比较好用的参数是 /W4 (参考这里)。

    使用 /sdl 参数可再多开启一些和安全性相关的警告讯息。

    使用范例如下:

    C:\> cl /W4 /sdl /Fe:hello.exe hello.c

    开启调试讯息

    使用 /Zi 参数可在编译程序时额外产生一些调试相关的讯息。

    选择最佳化策略

    cl 常见的最佳化参数如下:

    • /Od:关闭最佳化,默认情境
    • /O1:最省空间的最佳化
    • /O2:最佳速度的最佳化
    • /Os:偏向节省空间的最佳化
    • /Ot:偏向改善速度的最佳化

    除此之外,还有一些细节选项可调。一开始时不用耗费过多时间在调最佳化参数上面,在最后要发布程序时再来费心选择即可。

    指定 C 标准 (C Standard) 的版本

    很遗憾地,Visual C++ 官网没有提到其 C 编译器的 C 标准支援到什么程度,也无法在编译时指定 C 标准的版本。从一些网络上相关的文章间接可知,目前大概仅支援一部分的 C99。相较于 C++ 标准,Visual C++ 对 C 标准的实现步调缓慢,短期内不会立即改善。如果没有非得用 Visual C++,倒可用 MinGW (GCC 的移植品) 或其他的 C 编译器。

    链接外部文件

    使用 /I 参数可在编译时加入外部路径,如下例:

    C:\> for %x in (*.c) do cl /c %x
    C:\> cl /Fe:prog.exe *.obj /I\include

    编译函式库

    编译静态函式库可参考以下指令:

    C:\> for %x in (*.c) do cl /c %x
    C:\> lib /out:something.lib *.obj

    Visual C++ 的静态函式库的扩展名是 *.lib*,而非 *.a*。

    编译动态函式库可参考以下指令:

    C:\> for %x in (*.c) do /c %x
    C:\> link /DLL /OUT:something.dll *.obj

    Windows 上的动态函式库的扩展名是 *.dll*。

    【赞助商连结】