1、Visual+c+编译器选项Visual C+ 编译器选项目录:一、编译器选项(指定编译器响应文件)3/AI(指定元数据目录)3/analyze(企业代码分析) 4/arch(最小 CPU 结构) 5/bigobj(增加 .obj 文件中的节数量)6/C(在预处理期间保留注释)7/c(编译但不)7/clr(公共语言运行库编译)8/D(预处理器定义)13/doc(处理文档注释)14/E(预处理到 stdout)16/EH(异常处理模型)17/EP(不使用 #line 指令预处理到 stdout)19/errorReport(报告部编译器错误)20/F(设置堆栈大小)22输出文件 (/F) 选项
2、23/favor(针对 64 位进行优化)23/FC(所诊断源代码文件的完整路径)24/fp(指定浮点行为)25/G(处理器优化)选项28/GA(Windows 应用程序优化)29/Gd、/Gr、/Gz(调用约定)29/Ge(启用堆栈探测)31/GF(消除重复的字符串)32/GH(启用 _pexit 挂钩函数)34/Gh(启用 _penter 挂钩函数)35/GL(全程序优化)35/Gm(启用最小重新生成)36/GR(启用运行时类型信息)37/GS(缓冲区安全检查)38/Gs(控制堆栈检查调用)40/GT(支持纤程安全的线程本地存储区)41/GX(启用异常处理)41/Gy(启用函数级)42/G
3、Z(启用堆栈帧运行时错误检查)43/H(限制外部名称长度)44/HELP(编译器命令行帮助)45/homeparams(将寄存器参数复制到堆栈)46/hotpatch(创建可热修补的映像)46/I(附加的包含目录)47/J(默认 char 类型是 unsigned)48/link(将选项传递到器)49/LN(创建 MSIL 模块)49/MD、/MT、/LD(使用运行时库)50/nologo(取消显示启动标志)52/O 选项(优化代码)52/openmp(启用 OpenMP 2.0 支持)53/P(预处理到文件)55/Q 选项(低级别操作)56/RTC(运行时错误检查)56/showInclud
4、es(列出包含文件)59/Tc、/Tp、/TC、/TP(指定源文件类型)60/U、/u(取消符号定义)61/V(版本号)62/vd(禁用构造置换)63/vmb、/vmg(表示方法)64/vmm、/vms、/vmv(通用用途表示形式)65/w、/Wn、/WX、/Wall、/wln、/wdn、/wen、/won(警告等级)66/WL(启用单行诊断)68/Wp64(检测 64 位可移植性问题)69/X(忽略标准包含路径)70/Y(预编译头)71/Z7、/Zi、/ZI(调试信息格式)71/Za、/Ze(禁用语言扩展)73/Zc(一致性)74/Zg(生成函数原型)74/Zl(省略默认库名)75/Zm(指
5、定预编译头的存分配限制)76/Zp(结构成员对齐)77/Zs(只进行语法检查)78/Zx(调试经过优化的 Itanium 代码)79二、网上摘录小技巧79(来自MSDN技术资源库,只为方便查阅而下载整理. Xsf 2008.01.12)一、Visual C+ 编译器选项1.指定编译器响应文件。response_file参数 response_file 包含编译器命令的文本文件。备注:响应文件可以包含任何想在命令行上指定的命令。如果使用计算机 (Windows 95、Windows 98、Windows 98 Second Edition、Windows Millennium Edition)
6、且命令行参数超过 127 个字符,这可能相当有用。不能从响应文件部指定 选项。即一个响应文件不能嵌入另一个响应文件。可以从命令行指定所需数量的响应文件选项(例如 respfile.1 respfile.2)。在 Visual Studio 开发环境中设置此编译器选项 无法从开发环境部指定响应文件,而必须在命令行上指定。以编程方式设置此编译器选项 不能以编程方式更改此编译器选项。2./AI(指定元数据目录)指定在解析传递给 #using 指令的文件引用时编译器将搜索的目录。/AIdirectory参数 directory 编译器要搜索的目录或路径。备注 :只能将一个目录传递给 /AI 调用。为要
7、编译器搜索的每个路径指定一个 /AI 选项。在 Visual Studio 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“常规”属性页。4. 修改“解析 #using 引用”属性。以编程方式设置此编译器选项 请参见 AdditionalUsingDirectories。Visual C+ 编译器选项3./arch(最小 CPU 结构)使用流式处理 SIMD 扩展 (SSE) 和流式处理 SIMD 扩展 2 (SSE2) 指令指定生成代码的结构。 /arch:SSE|SSE2备注 注意 /arc
8、h 仅在为 x86 平台编译时可用。为 x64 或 Itanium 进行编译时,此编译器选项不可用。SSE 指令在各种 Pentium 和 AMD Athlon 处理器中均存在。SSE2 指令仅存在于 Pentium 4 处理器中。/arch:SSE 允许编译器使用 SSE 指令,而 /arch:SSE2 允许编译器使用 SSE2 指令。_M_IX86_FP 指示使用哪个 /arch 编译器选项(如果有);有关更多信息,请参见 Predefined Macros。在指定 /arch 时,优化程序将选择何时以及如何使用 SSE 和 SSE2 指令。当确定使用 SSE/SSE2 指令和寄存器肯定要
9、比使用 x87 浮点寄存器堆栈更快时,SSE 和 SSE2 指令将用于某些标量浮点计算。因此,您的代码实际上将混合使用 x87 和 SSE/SSE2 来进行浮点计算。此外,通过 /arch:SSE2,可将 SSE2 指令用于某些 64 位整数运算。除了使用 SSE 和 SSE2 指令之外,编译器还将使用在支持 SSE 和 SSE2 的处理器修订版上提供的其他指令。例如,在 Intel 处理器的 Pentium Pro 修订版中首次出现的 CMOV 指令。在使用 /clr(公共语言运行库编译)进行编译时,/arch 对托管函数的代码生成没有任何影响。/arch 只影响本机函数的代码生成。/arc
10、h 和 /QIfist(取消 _ftol)不能在同一 compiland 上使用。特别是,如果用户没有使用 _controlfp 修改 FP 控制字,则运行库启动代码会将 x87 FPU 控制字精度控制字段设置为 53 位,这样,表达式的所有浮点运算和双精度运算都以 53 位有效数和 15 位指数进行。但是,所有 SSE 单精度运算都将使用 24 位有效数/8 位指数,而 SSE2 双精度运算将使用 53 位有效数/11 位指数。有关更多信息,请参见 _control87, _controlfp, _control87_2。例如,在单个表达式树中可能会出现这些差异,而在每一子表达式后存在用户赋
11、值的情况下则不会:复制代码r = f1 * f2 + d; / Different results are possible on SSE/SSE2.相对于:复制代码 t = f1 * f2; / Do f1 * f2, round to the type of t. r = t + d; / This should produce the same overall result / regardless whether x87 stack or SSE/SSE2 is used.controlfp 不更改 MXCSR 控制位,因此,对于 /arch:SSE2,任何依赖于使用 controlf
12、p 的功能都将被破坏。在 Visual Studio 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“代码生成”属性页。4. 修改“启用增强指令集”属性。以编程方式设置此编译器选项 请参见 EnableEnhancedInstructionSet。Visual C+ 编译器选项/analyze(企业代码分析)启用代码分析。4./analyze:WX-备注 :使用 /WX 进行编译时,指定 /analyze:WX- 意味着代码分析警告将不会被视为错误。有关更多信息,请参见 /w、/Wn、/WX、/
13、Wall、/wln、/wdn、/wen、/won(警告等级)。/analyze 仅在 x86 编译器的企业(团队开发)版本中可用。有关代码分析的更多信息,请参见 C/C+ 代码分析概述和 针对 C/C+ 警告的代码分析。在 Visual Studio 开发环境中设置此编译器选项1. 打开此项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。2. 展开“配置属性”节点。3. 展开“代码分析”节点。4. 选择“常规”属性页。5. 修改一个或多个“代码分析”属性。以编程方式设置此器选项 请参见 EnablePREfast。5/bigobj(增加 .obj 文件中的节数量)/bigobj
14、 增加对象文件可包含的节数。/bigobj备注 默认情况下,对象文件最多可存放 65,536 (216) 个可寻址的节。/bigobj 可将该地址容量增加至 4,294,967,296 (232)。大多数模块将从来不会生成包含节数超过 65,536 的 .obj 文件。但是,计算机生成的代码或大量使用模板库的代码可能需要可存放更多节的 .obj 文件。只有 Visual C+ 2005(或更高版本)中提供的器才能使用通过 /bigobj 生成的 .obj 文件。Visual C+ 2005 之前的版本中所提供的器不能读取使用 /bigobj 生成的 .obj 文件。在 Visual Studi
15、o 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“命令行”属性页。4. 在“附加选项”框中键入编译器选项。以编程方式设置此编译器选项 请参见 AdditionalOptions。6./C(在预处理期间保留注释)/C :在预处理期间保留注释。备注 此编译器选项需要 /E、/P 或 /EP 选项。下面的代码示例将显示源代码注释。复制代码/ C_compiler_option.cpp/ compile with: /E /C /cint i; / a variable此示例将生成以下输出。复制代码#
16、line 1 C_compiler_option.cppint i; / a variable在 Visual Studio 开发环境中设置此编译器选项1. 打开此项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“预处理器”属性页。4. 修改“保留注释”属性。以编程方式设置此编译器选项 请参见 KeepComments。7. /c(编译但不)禁止自动调用 LINK。 /c备注 用 /c 编译将只创建 .obj 文件。必须用正确的文件和选项显式调用 LINK,才能执行生成的阶段。默认情况下,在开发环境中创建的任何部项目都使用 /c 选项
17、。在 Visual Studio 开发环境中设置此编译器选项 此选项从开发环境部不可用。以编程方式设置此编译器选项 若要以编程方式设置此编译器选项,请参见 CompileOnly。示例 下列命令行创建对象文件 FIRST.obj 和 SECOND.obj。忽略 THIRD.obj。复制代码CL /c FIRST.C SECOND.C THIRD.OBJ若要创建可执行文件,必须调用 LINK:复制代码LINK firsti.obj second.obj third.obj /OUT:filename.exe8. /clr(公共语言运行库编译)使应用程序和组件能够使用公共语言运行库 (CLR) 中
18、的功能。/clr:options参数 options 以下一个或多个选项,以逗号分隔:/clr 为您的应用程序创建可由其他 CLR 应用程序使用的元数据,并允许您的应用程序使用其他 CLR 组件的元数据中的类型和数据。有关更多信息,请参见: 混合(本机和托管)程序集 如何:迁移到 /clr /clr:pure 生成仅包含 MSIL 的输出文件,其中不包含任何本机可执行代码,但是可以包含编译为 MSIL 的本机类型。有关更多信息,请参见纯代码和可验证代码。/clr:safe 生成仅包含 MSIL(无本机可执行代码)且可验证的输出文件。/clr:safe 启用验证诊断 (PEVerify 工具 (
19、Peverify.exe)。有关更多信息,请参见 编写可验证为类型安全的代码。/clr:oldSyntax 针对 C+ 语法(CLR 编程的原始 Visual C+ 语法)启用托管扩展。在 Microsoft Visual C+ 2005 中,不赞成使用 C+ 语法的托管扩展。如果要维护使用 C+ 托管扩展的 Visual C+ 应用程序,则只应当使用 /clr:oldSyntax。如果要开发新应用程序,请使用更新的语法;有关更多信息,请参见 New C+ Language Features。如果您拥有 C+ 应用程序的托管扩展,就可以开始停靠您的项目以使用新语法;有关更多信息,请参见 移植和
20、升级程序。/clr:noAssembly 指定程序集清单不应插入到输出文件中。默认情况下,noAssembly 无效,并且将程序集清单插入到输出文件中。清单中不包含程序集元数据的托管程序称为“模块”。有关生成模块的原因,请参见 /LN(创建 MSIL 模块)。仅在 DLL 为编译输出文件时,才可以使用 noAssembly。如果使用 /c(编译但不) 和 /clr:noAssembly 进行编译,则应在器阶段指定 /NOASSEMBLY(创建 MSIL 模块) 选项以创建模块。noAssembly 在 Visual C+ 2005 中被否决。应改用 /LN(创建 MSIL 模块)。有关更多信息
21、,请参见 否决的编译器选项。在 Visual C+ 2005 之前,/clr:noAssembly 暗示 /clr。但是,现在 /clr 还支持 /clr:oldSyntax,因此必须在指定 /clr:noAssembly 时指定一个 /clr 形式。例如,/clr:noAssembly/clr 使用新的 Visual C+ CLR 语法创建模块,而 /clr:noAssembly,oldSyntax 使用 C+ 托管扩展创建模块。在 Visual C+ 2005 之前,/clr:noAssembly 需要 /LD。而现在 /LD 通过指定 /clr:noAssembly 来表示。/clr:i
22、nitialAppDomain 允许 Visual C+ 应用程序在公共语言运行库版本 1 中运行。如果使用 initialAppDomain,则可以参见知识库文章 Q309694 中讨论的一些问题。可以查找 MSDN Library 媒体中或 support.microsoft./default.aspx?ln=zh-cn 中的知识库文章。 用 initialAppDomain 编译的应用程序决不应该由使用 ASP.NET 的应用程序使用。应升级到较新的运行库,以便用 C+ 执行 ASP.NET 任务。备注 托管代码是可由公共语言运行库检查和管理的代码。托管代码可以访问托管对象。另请参见 /
23、clr 限制。有关如何开发定义和使用托管类型的应用程序的信息,请参见 New C+ Language Features。使用 /clr 编译的应用程序可能包含托管数据,也可能不包含托管数据。若要允许在托管应用程序中进行调试,请参见 /ASSEMBLYDEBUG(添加 DebuggableAttribute)。只有 CLR 类型将在垃圾回收堆中进行实例化。有关更多信息,请参见 Classes and Structs (Managed)。若要将函数编译为本机代码,请使用 unmanaged 杂注。有关更多信息,请参见 managed, unmanaged。默认情况下,/clr 无效。当 /clr
24、生效时,/MD 也将生效(有关更多信息,请参见 /MD、/MT、/LD(使用运行时库)。/MD 确保从标准头 (.h) 文件中选择运行库例程的动态的多线程版本。多线程处理是托管编程所必需的,其中一部分原因是 CLR 垃圾回收器将在辅助线程中运行终结器。如果使用 /c 进行编译,则可以使用 /CLRIMAGETYPE(指定 CLR 映像的类型) 指定生成的输出文件的 CLR 类型(IJW 类型、安全类型或纯类型)。/clr 暗指 /EHa,不允许其他 /EH 选项与 /clr 一起使用。有关更多信息,请参见 /EH(异常处理模型)。有关如何确定文件的 CLR 映像类型的信息,请参见 /CLRHE
25、ADER。必须使用同一个运行时库编译器选项(/MD 或 /LD)编译传递到给定器调用的所有模块。使用 /ASSEMBLYRESOURCE(嵌入托管资源) 器选项在程序集中嵌入资源。/DELAYSIGN(为程序集进行部分签名)、/KEYCONTAINER(指定密钥容器以便为程序集签名) 和 /KEYFILE(指定密钥或密钥对以便为程序集签名) 器选项也可用于自定义程序集的创建方式。使用 /clr 时,_MANAGED 符号被定义为 1。有关更多信息,请参见 Predefined Macros。首先将初始化本机对象文件中的全局变量(如果可执行文件为 DLL,则在 DllMain 期间),然后将初始
26、化托管部分中的全局变量(在运行任何托管代码之前)。#pragma init_seg 仅影响托管和非托管类别中的初始化顺序。使用 /clr:safe 进行编译与对诸如 C# 等语言使用 /platform:anycpu 进行编译很相似。安全映像和纯映像纯映像将使用 C 运行时库的 CLR 版本。但是,CRT 无法验证,因此使用 /clr:safe 进行编译时不能使用 CRT。有关更多信息,请参见 C Run-Time Libraries。不能出现在纯映像中的本机代码的示例包括联程序集、setjmp 或 longjmp。纯映像或安全映像的每个入口点都被托管。使用 /clr 进行编译时,入口点是本机入口点。有关更多信息,请参见 _clrcall。使用 /clr:safe 进行编译时,变量
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1