示例程序 test1.cpp 案例 1:

// test1.cpp
void main()
{
}


如果生成使用 / ML test1.cpp (或 ) 编译器选项, 程序将链接到其他库中除与 LIBC.LIB (或 LIBCD.LIB, 有关调试版本), MLd , 为调试生成 /。


如果生成使用 / MT test1.cpp (或 ) 编译器选项, 程序将链接到其他库中除与 LIBCMT.LIB (或 LIBCMTD.LIB, 有关调试版本), MTd , 为调试生成 /。


如果生成 test1.cpp 使用 / MD (或 ) 编译器选项, 程序将链接到其他库中除与 MSVCRT.LIB (或 MSVCRTD.LIB, 有关调试版本), MDd , 为调试生成 /。 在这种情况下, 程序将是依赖 MSVCRT.DLL (或 MSVCRTD.DLL 有关调试版本)。

例二: 示例程序 test2.cpp

// test2.cpp
   #include <iostream>
   void main()
   {
   }


示例程序 test3.cpp 情况 3:

具有 h 扩展名 注意 : 流头文件有 Visual C++ 2002年抨击并在 VisualC++2005 和 Visual C++ 2003 中删除了 (包括 < useoldio.h >)。 因此, 以下示例在晚于 Visual C++ 2002 版本的 VisualC++ 中无法工作。

// test3.cpp
#include <iostream.h>
void main()
{
}

确定是否将链接标准 C++ 库、 旧 iostream 库, 或没有标题。 确定是否为默认链接多线程 DLL 版本的单线程、 多线程, 库或编译器选项 ( / ML [ d ] , [ d ] / MT , / MD [ d ] )。 


注意 它似乎头没有 h 扩展名是常用 C++ 头并且页眉与 h 扩展名是 C 运行头或旧 iostream 头。 不是如此。 详见下面, < useoldio.h > 文件和 < use_ansi.h > 确定库应用程序将链接。 


实际, 还有两头文件, 包含 #pragmas 和 <use_ansi.h>, <useoldio.h>。 #pragmas 强制或者旧 iostream 库或标准 C++ 库到中链接默认。 


头文件 <useoldio.h> 包含 # pragma 语句, 强制被链接到旧 iostream 库。 所有旧 iostream 头包括 <useoldio.h>。 因此, 如果, 应用程序中包含任何旧 iostream 头旧 iostream 库将链接默认。 下表列出所有头文件包含 <useoldio.h>。

Old iostream Headers
   --------------------

   FSTREAM.H   IOMANIP.H
   IOS.H       IOSTREAM.H
   ISTREAM.H   OSTREAM.H
   STDIOSTR.H  STREAMB.H
   STRSTREA.H

头文件 <use_ansi.h> 包含 # pragma 语句, 强制常用 C++ 库中被链接到。 所有常用 C++ 头包括 <use_ansi.h>。 因此如果, 应用程序中包含任何常用 C++ 头标准 C++ 库将链接默认。 下表列出所有头文件包含 <use_ansi.h>。

Standard C++ Headers
   ------------------------------------------------------

   ALGORITHM    BITSET     COMPLEX    DEQUE
   FSTREAM    FUNCTIONAL   IOMANIP    IOS
   IOSFWD      IOSTREAM    ISTREAM    ITERATOR
   LIMITS      LIST        LOCALE     MAP
   MEMORY      NUMERIC     OSTREAM    QUEUE
   SET         SSTREAM     STACK      STDEXCEPT
   STREAMBUF   STRING      STRSTREAM  TYPEINFO
   UTILITY     VALARRAY    VECTOR     XIOSBASE
   XLOCALE     XLOCINFO    XLOCMON    XLOCNUM
   XLOCTIME    XMEMORY     XSTRING    XTREE
   XUTILITY    YMATH.H

不能混合对旧 iostream 库和新标准 C++ 库 Visual C++ 4.2 中调用。

Summary Table

------------------------------------------------------------------
| Compile   Old        New IOStream   Libraries                  |
| Option    IOStream   or STL         Linked With                |
|================================================================|
| /ML       No         No             LIBC.LIB                   |
|----------------------------------------------------------------|
| /MLd      No         No             LIBCD.LIB                  |
|----------------------------------------------------------------|
| /MT       No         No             LIBCMT.LIB                 |
|----------------------------------------------------------------|
| /MTd      No         No             LIBCMTD.LIB                |
|----------------------------------------------------------------|
| /MD       No         No             MSVCRT.LIB                 |
|----------------------------------------------------------------|
| /MDd      No         No             MSVCRTD.LIB                |
|----------------------------------------------------------------|
| /ML       No         Yes            LIBC.LIB,    LIBCP.LIB     |
|----------------------------------------------------------------|
| /MLd      No         Yes            LIBCD.LIB,   LIBCPD.LIB    |
|----------------------------------------------------------------|
| /MT       No         Yes            LIBCMT.LIB,  LIBCPMT.LIB   |
|----------------------------------------------------------------|
| /MTd      No         Yes            LIBCMTD.LIB, LIBCPMTD.LIB  |
|----------------------------------------------------------------|
| /MD       No         Yes            MSVCRT.LIB,  MSVCPRT.LIB   |
|----------------------------------------------------------------|
| /MDd      No         Yes            MSVCRTD.LIB, MSVCPRTD.LIB  |
|----------------------------------------------------------------|
| /ML       Yes        No             LIBC.LIB,    LIBCI.LIB     |
|----------------------------------------------------------------|
| /MLd      Yes        No             LIBCD.LIB,   LIBCID.LIB    |
|----------------------------------------------------------------|
| /MT       Yes        No             LIBCMT.LIB,  LIBCIMT.LIB   |
|----------------------------------------------------------------|
| /MTd      Yes        No             LIBCMTD.LIB, LIBCIMTD.LIB  |
|----------------------------------------------------------------|
| /MD       Yes        No             MSVCRT.LIB,  MSVCIRT.LIB   |
|----------------------------------------------------------------|
| /MDd      Yes        No             MSVCRTD.LIB, MSVCIRTD.LIB  |
------------------------------------------------------------------

对于使用 CRT DLL 摘要表


如果生成使用 / ML test2.cpp LIBCP.LIB (或 LIBCPD.LIB, 有关调试版本), 和其他库或 ) 编译器选项, 将程序链接与 LIBC.LIB (或 LIBCD.LIB, 有关调试版本) MLd , 为调试生成 (/。


如果生成使用 / MT test2.cpp LIBCPMT.LIB (或 LIBCPMTD.LIB, 有关调试版本), 和其他库或 ) 编译器选项, 将程序链接与 LIBCMT.LIB (或 LIBCMTD.LIB, 有关调试版本) MTd , 为调试生成 (/。


如果生成使用 test2.cpp MSVCPRT.LIB (或 MSVCPRTD.LIB, 有关调试版本), 和其他库 (or /MDd, for a debug build) 编译器选项, / MD 与 MSVCRT.LIB (或 MSVCRTD.LIB, 有关调试版本) 将程序链接。 

对于 Microsoft Visual C++ 2005, 程序将会依赖 MSVCRT.DLL 和 MSVCP80.DLL (或 MSVCRTD.DLL 和 MSVCP80D.DLL 有关调试版本)。 

对于 Microsoft Visual C++ 2003, 程序将会依赖 MSVCRT.DLL 和 MSVCP71.DLL (或 MSVCRTD.DLL 和 MSVCP71D.DLL 有关调试版本)。 

对于 Microsoft Visual C++ 2002, 程序将会依赖 MSVCRT.DLL 和 MSVCP70.DLL (或 MSVCRTD.DLL 和 MSVCP70D.DLL 有关调试版本)。 

对于 MicrosoftVisualC++6.0, 程序将会依赖 MSVCRT.DLL 和 MSVCP60.DLL (或 MSVCRTD.DLL 和 MSVCP60D.DLL 有关调试版本)。 

对于 Microsoft Visual C++5.0, 程序将会依赖 MSVCRT.DLL 和 MSVCP50.DLL (或 MSVCRTD.DLL 和 MSVCP50D.DLL 有关调试版本)。 

对于 Microsoft Visual C++ 4.2, 程序将会依赖 MSVCRT.DLL (或为调试生成 MSVCRTD.DLL) MSVCPRT.LIB (或 MSVCPRTD.LIB, 有关调试版本)。