版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、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) 选项 23/favor(针对
2、 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/GZ(启用堆栈帧运行
3、时错误检查)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/showIncludes(列出
4、包含文件)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 E
6、dition) 且命令行参数超过 127 个字符,这可能相当有用。不能从响应文件内部指定 选项。即一个响应文件不能嵌入另一个响应文件。可以从命令行指定所需数量的响应文件选项(例如 respfile.1 respfile.2)。在 Visual Studio 开发环境中设置此编译器选项· 无法从开发环境内部指定响应文件,而必须在命令行上指定。以编程方式设置此编译器选项· 不能以编程方式更改此编译器选项。2./AI(指定元数据目录)指定在解析传递给 #using 指令的文件引用时编译器将搜索的目录。/AIdirectory 参数 directory 编译器要搜索的目录
7、或路径。 备注 :只能将一个目录传递给 /AI 调用。为要编译器搜索的每个路径指定一个 /AI 选项。在 Visual Studio 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“常规”属性页。4. 修改“解析 #using 引用”属性。以编程方式设置此编译器选项· 请参见 AdditionalUsingDirectories。Visual C+ 编译器选项3./arch(最小 CPU 结构)使用流式处理 SIMD 扩展 (SSE) 和流式处理 SIMD 扩展 2 (SSE
8、2) 指令指定生成代码的结构。 /arch:SSE|SSE2 备注 注意 /arch 仅在为 x86 平台编译时可用。为 x64 或 Itanium 进行编译时,此编译器选项不可用。SSE 指令在各种 Pentium 和 AMD Athlon 处理器中均存在。SSE2 指令仅存在于 Pentium 4 处理器中。/arch:SSE 允许编译器使用 SSE 指令,而 /arch:SSE2 允许编译器使用 SSE2 指令。_M_IX86_FP 指示使用哪个 /arch 编译器选项(如果有);有关更多信息,请参见 Predefined Macros。在指定 /arch 时,优化程序将选择何
9、时以及如何使用 SSE 和 SSE2 指令。当确定使用 SSE/SSE2 指令和寄存器肯定要比使用 x87 浮点寄存器堆栈更快时,SSE 和 SSE2 指令将用于某些标量浮点计算。因此,您的代码实际上将混合使用 x87 和 SSE/SSE2 来进行浮点计算。此外,通过 /arch:SSE2,可将 SSE2 指令用于某些 64 位整数运算。除了使用 SSE 和 SSE2 指令之外,编译器还将使用在支持 SSE 和 SSE2 的处理器修订版上提供的其他指令。例如,在 Intel 处理器的 Pentium Pro 修订版中首次出现的 CMOV 指令。在使用 /clr(公共语言运行库编译)进行编译时,
10、/arch 对托管函数的代码生成没有任何影响。/arch 只影响本机函数的代码生成。/arch 和 /QIfist(取消 _ftol)不能在同一 compiland 上使用。特别是,如果用户没有使用 _controlfp 修改 FP 控制字,则运行库启动代码会将 x87 FPU 控制字精度控制字段设置为 53 位,这样,表达式内的所有浮点运算和双精度运算都以 53 位有效数和 15 位指数进行。但是,所有 SSE 单精度运算都将使用 24 位有效数/8 位指数,而 SSE2 双精度运算将使用 53 位有效数/11 位指数。有关更多信息,请参见 _control87, _controlfp, _
11、control87_2。例如,在单个表达式树中可能会出现这些差异,而在每一子表达式后存在用户赋值的情况下则不会:复制代码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
12、不更改 MXCSR 控制位,因此,对于 /arch:SSE2,任何依赖于使用 controlfp 的功能都将被破坏。在 Visual Studio 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“代码生成”属性页。4. 修改“启用增强指令集”属性。以编程方式设置此编译器选项· 请参见 EnableEnhancedInstructionSet。Visual C+ 编译器选项/analyze(企业代码分析)启用代码分析。4./analyze:WX- 备注 :使用 /WX 进行编译
13、时,指定 /analyze:WX- 意味着代码分析警告将不会被视为错误。有关更多信息,请参见 /w、/Wn、/WX、/Wall、/wln、/wdn、/wen、/won(警告等级)。/analyze 仅在 x86 编译器的企业(团队开发)版本中可用。有关代码分析的更多信息,请参见 C/C+ 代码分析概述和 针对 C/C+ 警告的代码分析。在 Visual Studio 开发环境中设置此编译器选项1. 打开此项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。2. 展开“配置属性”节点。3. 展开“代码分析”节点。4. 选择“常规”属性页。5. 修改一个或多个“代码分析”属性。以编程
14、方式设置此链接器选项· 请参见 EnablePREfast。5/bigobj(增加 .obj 文件中的节数量)/bigobj 增加对象文件可包含的节数。/bigobj 备注 默认情况下,对象文件最多可存放 65,536 (216) 个可寻址的节。/bigobj 可将该地址容量增加至 4,294,967,296 (232)。大多数模块将从来不会生成包含节数超过 65,536 的 .obj 文件。但是,计算机生成的代码或大量使用模板库的代码可能需要可存放更多节的 .obj 文件。只有 Visual C+ 2005(或更高版本)中提供的链接器才能使用通过 /bigobj 生成的
15、.obj 文件。Visual C+ 2005 之前的版本中所提供的链接器不能读取使用 /bigobj 生成的 .obj 文件。在 Visual Studio 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“命令行”属性页。4. 在“附加选项”框中键入编译器选项。以编程方式设置此编译器选项· 请参见 AdditionalOptions。6./C(在预处理期间保留注释)/C :在预处理期间保留注释。 备注 此编译器选项需要 /E、/P 或 /EP 选项。下面的代码示例将显示源代码
16、注释。复制代码/ C_compiler_option.cpp/ compile with: /E /C /cint i; / a variable此示例将生成以下输出。复制代码#line 1 "C_compiler_option.cpp"int i; / a variable在 Visual Studio 开发环境中设置此编译器选项1. 打开此项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“预处理器”属性页。4. 修改“保留注释”属性。以编程方式设置此编译器选项· 请参见 KeepComments。7.
17、 /c(编译但不链接)禁止自动调用 LINK。 /c 备注 用 /c 编译将只创建 .obj 文件。必须用正确的文件和选项显式调用 LINK,才能执行生成的链接阶段。默认情况下,在开发环境中创建的任何内部项目都使用 /c 选项。在 Visual Studio 开发环境中设置此编译器选项· 此选项从开发环境内部不可用。以编程方式设置此编译器选项· 若要以编程方式设置此编译器选项,请参见 CompileOnly。 示例 下列命令行创建对象文件 FIRST.obj 和 SECOND.obj。忽略 THIRD.obj。复制代码CL /c FIRST.C SECO
18、ND.C THIRD.OBJ若要创建可执行文件,必须调用 LINK:复制代码LINK firsti.obj second.obj third.obj /OUT:filename.exe8. /clr(公共语言运行库编译)使应用程序和组件能够使用公共语言运行库 (CLR) 中的功能。/clr:options 参数 options 以下一个或多个选项,以逗号分隔:/clr 为您的应用程序创建可由其他 CLR 应用程序使用的元数据,并允许您的应用程序使用其他 CLR 组件的元数据中的类型和数据。有关更多信息,请参见:· 混合(本机和托管)程序集 · 如何:迁移到 /cl
19、r /clr:pure 生成仅包含 MSIL 的输出文件,其中不包含任何本机可执行代码,但是可以包含编译为 MSIL 的本机类型。有关更多信息,请参见纯代码和可验证代码。/clr:safe 生成仅包含 MSIL(无本机可执行代码)且可验证的输出文件。/clr:safe 启用验证诊断 (PEVerify 工具 (Peverify.exe)。有关更多信息,请参见 编写可验证为类型安全的代码。/clr:oldSyntax 针对 C+ 语法(CLR 编程的原始 Visual C+ 语法)启用托管扩展。在 Microsoft Visual C+ 2005 中,不赞成使用 C+ 语法的托管扩展。如果要维护
20、使用 C+ 托管扩展的 Visual C+ 应用程序,则只应当使用 /clr:oldSyntax。如果要开发新应用程序,请使用更新的语法;有关更多信息,请参见 New C+ Language Features。如果您拥有 C+ 应用程序的托管扩展,就可以开始停靠您的项目以使用新语法;有关更多信息,请参见 移植和升级程序。/clr:noAssembly 指定程序集清单不应插入到输出文件中。默认情况下,noAssembly 无效,并且将程序集清单插入到输出文件中。清单中不包含程序集元数据的托管程序称为“模块”。有关生成模块的原因,请参见 /LN(创建 MSIL 模块)。仅在 DLL 为编译输出文件
21、时,才可以使用 noAssembly。如果使用 /c(编译但不链接) 和 /clr:noAssembly 进行编译,则应在链接器阶段指定 /NOASSEMBLY(创建 MSIL 模块) 选项以创建模块。noAssembly 在 Visual C+ 2005 中被否决。应改用 /LN(创建 MSIL 模块)。有关更多信息,请参见 否决的编译器选项。在 Visual C+ 2005 之前,/clr:noAssembly 暗示 /clr。但是,现在 /clr 还支持 /clr:oldSyntax,因此必须在指定 /clr:noAssembly 时指定一个 /clr 形式。例如,/clr:noAsse
22、mbly /clr 使用新的 Visual C+ CLR 语法创建模块,而 /clr:noAssembly,oldSyntax 使用 C+ 托管扩展创建模块。在 Visual C+ 2005 之前,/clr:noAssembly 需要 /LD。而现在 /LD 通过指定 /clr:noAssembly 来表示。/clr:initialAppDomain 允许 Visual C+ 应用程序在公共语言运行库版本 1 中运行。如果使用 initialAppDomain,则可以参见知识库文章 Q309694 中讨论的一些问题。可以查找 MSDN Library 媒体中或 中的知识库文章。 用
23、initialAppDomain 编译的应用程序决不应该由使用 ASP.NET 的应用程序使用。应升级到较新的运行库,以便用 C+ 执行 ASP.NET 任务。 备注 托管代码是可由公共语言运行库检查和管理的代码。托管代码可以访问托管对象。另请参见 /clr 限制。有关如何开发定义和使用托管类型的应用程序的信息,请参见 New C+ Language Features。使用 /clr 编译的应用程序可能包含托管数据,也可能不包含托管数据。若要允许在托管应用程序中进行调试,请参见 /ASSEMBLYDEBUG(添加 DebuggableAttribute)。只有 CLR 类型将在垃圾回
24、收堆中进行实例化。有关更多信息,请参见 Classes and Structs (Managed)。若要将函数编译为本机代码,请使用 unmanaged 杂注。有关更多信息,请参见 managed, unmanaged。默认情况下,/clr 无效。当 /clr 生效时,/MD 也将生效(有关更多信息,请参见 /MD、/MT、/LD(使用运行时库)。/MD 确保从标准头 (.h) 文件中选择运行库例程的动态链接的多线程版本。多线程处理是托管编程所必需的,其中一部分原因是 CLR 垃圾回收器将在辅助线程中运行终结器。如果使用 /c 进行编译,则可以使用 /CLRIMAGETYPE(指定 CLR 映
25、像的类型) 指定生成的输出文件的 CLR 类型(IJW 类型、安全类型或纯类型)。/clr 暗指 /EHa,不允许其他 /EH 选项与 /clr 一起使用。有关更多信息,请参见 /EH(异常处理模型)。有关如何确定文件的 CLR 映像类型的信息,请参见 /CLRHEADER。必须使用同一个运行时库编译器选项(/MD 或 /LD)编译传递到给定链接器调用的所有模块。使用 /ASSEMBLYRESOURCE(嵌入托管资源) 链接器选项在程序集中嵌入资源。/DELAYSIGN(为程序集进行部分签名)、/KEYCONTAINER(指定密钥容器以便为程序集签名) 和 /KEYFILE(指定密钥或密钥对以
26、便为程序集签名) 链接器选项也可用于自定义程序集的创建方式。使用 /clr 时,_MANAGED 符号被定义为 1。有关更多信息,请参见 Predefined Macros。首先将初始化本机对象文件中的全局变量(如果可执行文件为 DLL,则在 DllMain 期间),然后将初始化托管部分中的全局变量(在运行任何托管代码之前)。#pragma init_seg 仅影响托管和非托管类别中的初始化顺序。使用 /clr:safe 进行编译与对诸如 C# 等语言使用 /platform:anycpu 进行编译很相似。安全映像和纯映像纯映像将使用 C 运行时库的 CLR 版本。但是,CRT 无法验证,因此
27、使用 /clr:safe 进行编译时不能使用 CRT。有关更多信息,请参见 C Run-Time Libraries。不能出现在纯映像中的本机代码的示例包括内联程序集、setjmp 或 longjmp。纯映像或安全映像的每个入口点都被托管。使用 /clr 进行编译时,入口点是本机入口点。有关更多信息,请参见 _clrcall。使用 /clr:safe 进行编译时,变量默认为 appdomain 范围的,而不能是基于每个进程的。使用 /clr:pure 时,appdomain 为默认值,但是可以使用 process 变量。在 64 位操作系统中运行使用 /clr 或 /clr:pure 编译的
28、32 位 .exe 文件时,应用程序将在 WOW64 下运行,WOW64 允许在 64 位操作系统中由 32 位 CLR 运行 32 位应用程序。默认情况下,使用 /clr:safe 编译的 .exe 将在运行 64 位操作系统的计算机的 64 位 CLR 中运行(在 32 位操作系统中,同样的 .exe 在 32 位 CLR 中运行)。但是,安全应用程序可以加载 32 位组件。在这种情况下,当安全映像加载 32 位应用程序时,在操作系统的 64 位支持下运行的安全映像将会失败 (BadFormatException)。若要确保安全映像在 64 位操作系统中加载 32 位映像时继续运行,必须使
29、用 /CLRIMAGETYPE(指定 CLR 映像的类型) 更改元数据 (.corflags),将其标记为在 WOW64 下运行。以下是示例命令行(替代您自己的输入符号):cl /clr:safe t.cpp /link /clrimagetype:pure /entry:?main$HYMHXZ /subsystem:console 有关获取修饰名的信息,请参见 使用列表查看修饰名。有关 64 位编程的更多信息,请参见 64 位编程(如何实现 - Visual C+)。有关示例、演练及更多信息,请参见:· 演练:使用 /clr:pure 功能 · 如何:迁移到 /clr:
30、pure · CppLangFeat 示例:语言功能概述 · 纯代码和可验证代码 元数据和未命名类未命名类将显示在名称形式如下的元数据中:$UnnamedClass$当前文件名的 crc$索引$,其中“索引”是未命名类在编译中的顺序号。例如,下列代码示例将在元数据中生成未命名类:复制代码/ clr_unnamed_class.cpp/ compile with: /clr /LDclass x;使用 ildasm.exe 查看元数据。在 Visual Studio 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见 如何:打开项目属性页。 2
31、. 单击“配置属性”文件夹。3. 单击“常规”属性页。4. 修改“公共语言运行库支持”属性。 有关如何创建模块的信息,请参见 /NOASSEMBLY(创建 MSIL 模块)。注意 在项目的“属性页”对话框中启用 /clr 后,与 /clr 不兼容的编译器选项属性也将根据需要进行调整。例如,如果设置 /RTC,然后启用 /clr,/RTC 将被关闭。另外,调试 /clr 应用程序时,“调试器类型”属性应设置为“混合”或“仅限托管”。有关更多信息,请参见 C+ 调试配置的项目设置。以编程方式设置此编译器选项· 请参见 CompileAsManaged。9. /D(预处理器定义)定义源文件
32、的预处理符号。/Dname= | # string | number 备注 可以将此符号与 #if 或 #ifdef 一起使用,以便有条件地编译源文件。在源文件中遇到重定义或用 #undef 指定取消定义符号之前,符号定义保持有效。/D 与在源文件的开头使用 #define 指令的效果大体相同。但是,/D 抽出命令行上的引号,#define 保留这些引号。默认情况下,与符号关联的值为 1。即 /DTEST 等效于 /DTEST=1。在下面的示例中,显示 TEST 的定义以输出 1。使用 /Dname= 进行编译将导致符号没有关联值。尽管该符号仍可用于有条件地编译代码,但它不会计算出
33、任何结果。例如,在示例程序中,用 /DTEST= 进行编译将导致编译器错误。此行为类似于带或不带值使用 #define。下列命令在 TEST.c 中定义符号 DEBUG:复制代码CL /DDEBUG TEST.C下面的命令移除 TEST.c 中关键字 _far 的所有匹配项:复制代码CL /D_far= TEST.C不能将 CL 环境变量设置为包含等号的字符串。若要将 /D 与 CL 环境变量一起使用,必须指定数字符号而非等号:复制代码SET CL=/DTEST#0在 Visual Studio 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属
34、性页。 2. 单击“C/C+”文件夹。3. 单击“预处理器”属性页。4. 修改“预处理器定义”属性。以编程方式设置此编译器选项· 请参见 PreprocessorDefinitions。 示例 复制代码/ cpp_D_compiler_option.cpp/ compile with: /DTEST#include <stdio.h>int main( ) #ifdef TEST printf_s("TEST defined %dn", TEST); #else printf_s("TEST not definedn");
35、 #endif输出TEST defined 1 请参见 参考编译器选项设置编译器选项/U、/u(取消符号定义)The #undef DirectiveThe #define Directive10. /doc(处理文档注释)全部折叠语言筛选器 : 全部 Visual BasicC#C+J#JScriptXAML此页面仅适用于 Microsoft Visual Studio 2005/.NET Framework 2.0同时提供下列产品的其他版本: · Microsoft Visual Studio 2008/.NET Framework 3.5Visual C+ 编译器选项
36、/doc(处理文档注释)(C/C+)使编译器对源代码文件中的文档注释进行处理,并为每个具有文档注释的源代码文件创建一个 .xdc 文件。/docname 参数 name 编译器将创建的 .xdc 文件的名称。仅在将一个 .cpp 文件传入编译时有效。 备注 使用 xdcmake.exe 将 .xdc 文件处理为一个 .xml 文件。有关更多信息,请参见 XDCMake Reference。可以将文档注释添加到源代码文件中。有关更多信息,请参见 Recommended Tags for Documentation Comments (C+)。/doc 与 /clr:oldSy
37、ntax 不兼容。有关更多信息,请参见 /clr(公共语言运行库编译)。若要在 IntelliSense 中使用生成的 .xml 文件,就要使 .xml 文件与要支持的程序集具有相同的文件名,并使 .xml 文件与该程序集处于同一目录中。当在 Visual Studio 项目中引用该程序集时,也可以找到该 .xml 文件。有关更多信息,请参见使用 IntelliSense 和提供 XML 代码注释。在 Visual Studio 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。2. 展开“配置属性”节点。3. 展开“C/C+”节点。4.
38、选择“输出文件”属性页。5. 修改“生成 XML 文档文件”属性。以编程方式设置此链接器选项· 请参见 GenerateXMLDocumentationFiles。11. /E(预处理到 stdout)此选项预处理 C 和 C+ 源文件,并将预处理后的文件复制到标准输出设备中。/E 备注 在此过程中,将执行所有的预处理器指令,执行宏展开,并移除注释。若要在预处理输出中保留注释,则还请使用 /C(在预处理期间保留注释)编译器选项。/E 将 #line 指令添加到输出中,添加的位置是每个包含文件的开头和结尾以及被条件编译预处理器指令移除的行的周围。这些指令将预处理文件中的行重新
39、编号。因此,在处理后期生成的错误引用原始源文件的行号而不是预处理文件中的行的行号。/E 选项会取消编译。若要编译,必须重新提交预处理后的文件。/E 还取消 /FA、/Fa 和 /Fm 选项的输出文件。有关更多信息,请参见 /FA、/Fa(列表文件)和 /Fm(命名映射文件)。若要取消 #line 指令,请改用 /EP(不使用 #line 指令预处理到 stdout)选项。若要将预处理输出发送到文件而不是 stdout,请改用 /P(预处理到文件)选项。若要取消 #line 指令并将预处理输出发送到文件,请同时使用 /P 和 /EP。用 /E 选项时,不能使用预编译头。请注意,当预处理到单独文件
40、时,不在标记后发出空格。这可导致非法程序或产生预料不到的副作用。下面的程序会成功编译:复制代码#define m(x) xm(int)main( ) return 0;然而如果用下列方式编译:复制代码cl -E test.cpp > test2.cpptest2.cpp 中的 int main 将错误地成为 intmain。在 Visual Studio 开发环境中设置此编译器选项1. 打开该项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“命令行”属性页。4. 在“附加选项”框中键入编译器选项。以编程方式设置此编译器选项
41、83; 请参见 GeneratePreprocessedFile。 示例 下列命令行预处理 ADD.C,保留注释,添加 #line 指令,并在标准输出设备上显示结果:复制代码CL /E /C ADD.C12. /EH(异常处理模型)指定编译器要使用的异常处理模型,并且销毁由于异常的原因将超出范围的 C+ 对象。如果未指定 /EH,编译器将捕获结构化异常和 C+ 异常,但将不销毁由于异常的原因而将超出范围的 C+ 对象。/EHs|ac- 参数 a 捕获异步(结构化)异常和同步 (C+) 异常的异常处理模型。s 仅捕获 C+ 异常并通知编译器假定 extern C 函数确实引发
42、了异常的异常处理模型。c 如果与 s (/EHsc) 一起使用,则仅捕获 C+ 异常并通知编译器假定 extern C 函数从未引发 C+ 异常。/EHca 等效于 /EHa。 备注 使用 /EHs 指定同步异常处理模型(没有结构化异常处理异常的 C+ 异常处理)。如果使用 /EHs,那么 catch 子句将不会捕获异步异常。此外,在 Visual C+ 2005 中,当生成异步异常时,即使处理了异步异常也不会损坏范围内的所有对象。在 /EHs 下,catch(.) 仅捕获 C+ 异常。将不捕获访问冲突和 System.Exception 异常。使用 /EHa 指定异步异常处理模型(
43、具有结构化异常处理异常的 C+ 异常处理)。/EHa 可能导致映像性能较差,因为编译器将不会积极地优化 catch 块,即使编译器没有发现 throw 异常。如果希望捕获由 throw 以外的内容引发的异常,请使用 /EHa。下面的示例将生成异常:复制代码/ compiler_options_EHA.cpp/ compile with: /EHa#include <iostream>#include <excpt.h>using namespace std;void fail() / generates SE and attempts to catch it using
44、 catch(.) try int i = 0, j = 1; j /= i; / This will throw a SE (divide by zero). catch(.) / catch block will only be executed under /EHa cout<<"Caught an exception in catch(.)."<<endl; int main() _try fail(); / _except will only catch an exception here _except(EXCEPTION_EXECUTE
45、_HANDLER) / if the exception was not caught by the catch(.) inside fail() cout << "An exception was caught in _except." << endl; /EHc 选项需要指定 /EHs 或 /EHa。使用 /clr(公共语言运行库编译) 暗指 /EHa(/clr /EHa 是冗余的)。如果在 /clr 后使用 /EHsc,则编译器将生成一个错误。优化不会影响此行为。当捕获异常时,编译器将为与该异常在同一范围内的对象调用类析构函数。如果未捕获异常,
46、则不会运行这些析构函数。有关 /clr 下的异常处理限制的信息,请参见 _set_se_translator。可以使用符号 - 清除该选项。例如,/EHsc- 解释为 /EHs /EHc- 并且等价于 /EHs。有关更多信息,请参见 Exception Handling: Default Synchronous Exception Model。在 Visual Studio 开发环境中设置此编译器选项1. 打开此项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“代码生成”属性页。4. 修改“启用 C+ 异常”属性。或者,也可以使用以下
47、过程:在 Visual Studio 开发环境中设置此编译器选项1. 单击“C/C+”文件夹。2. 单击“代码生成”属性页。3. 将“启用 C+ 异常”设置为“否”。4. 单击“命令行”属性页。5. 在“附加选项”框中键入编译器选项。以编程方式设置此编译器选项· 请参见 ExceptionHandling。13. /EP(不使用 #line 指令预处理到 stdout)预处理 C 和 C+ 源文件,并将预处理文件复制到标准输出设备。 /EP 备注 在此过程中,执行所有的预处理器指令,执行宏展开,并移除注释。若要在预处理输出中保留注释,请将 /C(在预处理期间保留注释)选项与
48、 /EP 一起使用。/EP 选项取消编译。必须重新提交预处理文件以进行编译。/EP 还取消来自 /FA、/Fa 和 /Fm 选项的输出文件。有关更多信息,请参见 /FA、/Fa(列表文件)和 /Fm(命名映射文件)。在处理后期生成的错误引用的是预处理文件的行号而非原始源文件的行号。如果希望行号引用原始源文件,请改用 /E(预处理到 stdout)。/E 选项出于此目的将 #line 指令添加到输出。若要将带有 #line 指令的预处理输出发送到文件,请改用 /P(预处理到文件)选项。若要将带有 #line 指令的预处理输出发送到 stdout,请同时使用 /P 和 /EP。用 /EP 选项时,
49、不能使用预编译头。在 Visual Studio 开发环境中设置此编译器选项1. 打开此项目的“属性页”对话框。有关详细信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“预处理器”属性页。4. 修改“生成预处理文件”属性。以编程方式设置此编译器选项· 请参见 GeneratePreprocessedFile。 示例 下列命令行预处理文件 ADD.C,保留注释并在标准输出设备上显示结果:复制代码CL /EP /C ADD.C14. /errorReport(报告内部编译器错误)全部折叠语言筛选器 : 全部 Visual BasicC#C+J#JSc
50、riptXAML此页面仅适用于 Microsoft Visual Studio 2005/.NET Framework 2.0同时提供下列产品的其他版本: · Microsoft Visual Studio 2008/.NET Framework 3.5Visual C+ 编译器选项/errorReport(报告内部编译器错误)允许直接向 Visual C+ 团队提供内部编译器错误 (ICE) 信息。/errorReport: none | prompt | queue | send 参数 none 不收集或向 Microsoft 发送有关内部编译器错误的报告。promp
51、t 提示您在收到内部编译器错误时发送报告。在开发环境中编译应用程序时,prompt 是默认值。queue 将错误报告加入队列。当使用管理员权限登录时,将显示弹出窗口并允许您报告自上次登录以来的任何失败(每三天提示您发送失败报告不超过一次)。在命令行上编译应用程序时,queue 是默认值。send 自动将内部编译器错误报告发送到 Microsoft。若要启用此选项,必须首先同意 Microsoft 的数据收集策略。首次在计算机上指定 /errorReport:send 时,编译器消息将引导您访问包含 Microsoft 的数据收集策略的网站。 备注 当编译器无法处理源代码文件时,将导致内部编译器错误 (ICE)。当发生 ICE 时,编译器不生成输出文件或可用来修复代码的任何有用的诊断。在以前的版本中,当收到 ICE 时,最好致电 Microsoft 技术支持部门以报告问题。使用 /errorReport,您可以直接向 Visual C+ 团队提供 ICE 信息。错误报告有助于改进将来的编译器版本。用户发送报告的能力取决于计算机和用户策略权限。在 Visual Studio 开发环境中设置此编译器选项1. 打开此项目的“属性页”对话框。有关更多信息,请参见如何:打开项目属性页。 2. 单击“C/C+”文件夹。3. 单击“高级”属性页。4. 修改“错误报
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年中职康复技术(物理治疗)试题及答案
- 儿童大脑开发题目及答案
- IT系统集成合同协议2025年智能
- 2024年中考道德与法治(安徽)第二次模拟考试(含答案)
- 2025年海南省公需课学习-生态环境损害赔偿制度改革方案解析65
- 2025年质量月质量知识竞赛试题集及答案(共90题)
- 2025年营养健康顾问知识竞赛题库及答案(共160题)
- 2025年安全生产知识问答题及答案(共60题)
- 武生院思政考试题及答案
- 品质组长考试题库及答案
- 2025云南省人民检察院招聘22人笔试考试参考题库及答案解析
- 2026年郴州职业技术学院单招职业技能考试题库及答案详解一套
- 2026(人教版)数学五上期末复习大全(知识梳理+易错题+压轴题+模拟卷)
- 2025中国医学科学院医学生物学研究所招聘非事业编制人员2人(1号)考试笔试参考题库及答案解析
- 2025年全科医师转岗培训理论考试试题及正确答案
- 2025年中小学教师正高级职称评聘答辩试题(附答案)
- 销售瓷砖的合同范本
- (新教材)2025年人教版三年级上册数学 第5课时 进一步认识分数 课件
- 船舶合股协议书模板
- DB4201∕T 482-2016 病死动物无害化处理场(所)建设技术规范
- 【《基于Java Web的鲜果超市管理系统设计与实现》9400字】
评论
0/150
提交评论