您的位置 首页 报告

DSP编程技巧之6—揭开编译器奥秘面纱之操控与言语选项

编译器有一些控制选项,这些选项是供我们来控制编译器的,不像前几篇文章提到的那些选项那样,是编译器用来控制编译结果的。下面我们就来看看我们可以使用的控制编译器的选项有哪些:表1 编译器的控制选项

  编译器有一些操控选项,这些选项是供咱们来操控编译器的,不像前几篇文章说到的那些选项那样,是编译器用来操控编译成果的。下面咱们就来看看咱们能够运用的操控编译器的选项有哪些:

  表1 编译器的操控选项

操控选项

别号

操控作用

–compile_only

-c

操控编译器使得它只编译,不链接。

–help

-h

输出编译器运用的优化、操控等选项信息。它的后边能够加一些更清晰的选项或许名词,例如–help debug就能够输出关于debug的选项的信息。

–run_linker

-z

使能编译之后的链接功用,与榜首行的-c相对。-c-z一起存在时,-c起作用,-z不起作用。

–skip_assembler

-n

只编译,可是也不发生汇编文件。这样做的意图首要是为了快速验证程序有没有根本的语法过错等。-n选项和-z一起存在的时分,-n起作用,-z不起作用。从流程上讲不难了解,汇编等作业不完结,链接器没有作业方针也无法完结链接。

  就编译器自身来说,它只需读取C、C++、汇编等文件进行处理就完结任务了,所以编译器的操控选项并不多,一般状况下一个-z选项就满足咱们完结从编译程序到生成方针的编译器操控作用了。相比较而言,C、C++这些言语自身就杂乱的多了,而且由于有很多个版别的存在,不免有一些小紊乱的存在,所以编译器里与编程言语自身相关的选项就显得特别多,以便咱们来对言语的特性等进行正确运用,下面就看看编译器里与编程言语有关的选项:

  表2 编译器的编程言语选项

言语选项

别号

操控作用

–cpp_default

-fg

告诉编译器把一切的.c文件也当作C++源程序看待。假如不运用这个默许选项的话,也能够别离指定不同后缀名的文件,例如–asm_file=filename–c_file=filename-cpp_file=filename–obj_file=filename。举例说明,现在咱们有个文件叫file.s,那么运用–c_file=file.s的话能使得编译器依照处理C文件的方法处理file.s

–embedded_cpp

-pe

使能嵌入式的C++形式。嵌入式C++是规范的C++的一个子集,由NEC, Hitachi, Fujitsu,以及 Toshiba等几个公司在十几年前拟定,移除了模版、反常处理、运转时类型、新式C++转型、可变要害字、多重承继、虚拟承继等C++特性。

–exceptions

 

使能规范C++言语中的反常处理。默许状况下编译器是不使能C++的反常处理的,假如启用了这个选项的话,则一切的C++源程序都在启用了反常处理的状况下进行编译。

–float_operations_allowed

={none|all|32|64}

 

约束浮点类型的操作,包含彻底制止、答应32位浮点类型运转、答应64位浮点类型运转和一起答应32位与64位的浮点运算被编译。现在C28xFPU不支撑64位浮点的硬件运算,假如非要运用的话,需求编译器调用相关的算法库在编译时进行支撑,功率不高。

–gcc

 

GCC供给了在规范C/C++里边没有的一些特性,在嵌入式体系的开发中运用比较广泛,所以编译器也供给了对它的支撑。关于GCC的特色,能够参阅http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/C-Extensions.html#C-Extensions

–gen_acp_raw

-pl

运用这个选项能够使得编译器在编译时输出原始列表文件,然后更好地协助咱们了解编译的进程。这个原始列表文件里边包含了源程序里的行信息、头文件的切入和切出信息、确诊信息、穿插编译时预处理的源文件中相关句子的信息等。这个文件的内容比较具体,有爱好的网友能够启用这个选项之后编译看看。它包含了一些标识符,以协助咱们更快定位和了解相关的信息,包含:

N:对应的源程序的行数

X:源程序中的扩展行数,穿插编译时会遇到。

S:越过的行数,例如运用#if这样的预编译指令时,判别条件为假对应的不会被编译的行。

L:源程序中跳转对应的行数,例如调用一个头文件中界说的函数,或许从头文件中的函数界说回来。

E:过错

F:要害过错

R:提示

W:正告                  

–gen_acp_xref

-px

输出穿插参阅的信息列表,包含文件名、行数、列数,穿插引证发生的声明、修正、调用等信息。

–keep_unneeded_statics

 

保存界说了可是违反运用的静态变量,例如这些变量是咱们出于调试意图设置的,所以不期望被编译器给清除去。这个选项不能阻挠编译器删去未被运用的静态函数。

–kr_compatible

-pk

坚持与K&R版别C言语的兼容性,只能作用于C程序上,对C++程序无效。

–multibyte_chars

-pc

答应在注释、字符串常量和字符常量中运用多字节字符。多字节字符和Unicode是相对的,Unicode字符都运用两个字节编码的编码模,多字节字符则是可变的。这个选项有时分是直观的,例如用英语以外的其它言语编写的注释,再翻开的时分在CCS里边或许就全变成?????这样的了。

–no_inlining

-pi

制止编译器对函数进行内联。可是在启用了-O3编译器优化选项的状况下,编译器仍然会履行主动内联功用。

–no_intrinsics

-pn

制止运用编译器内建的intrinsics函数。这些函数一般是汇编言语写成的,例如在C28x上调用IQMath库里的_IQMpy编程时,编程发生的汇编言语就能够直接运用内建的__qmpy32(a32, b32, q)完结对数学表的调用。

–program_level_compile

-pm

启用程序等级的优化。在这种优化条件下,编译器会把一切的源程序集合到一个模块中进行编译,这样它就能清楚了解一切的代码的来龙去脉,然后更好地完结程序的优化。例如,一个有内容的函数既没有被main()函数调用,也没有被其它函数调用的话,编译器就把它优化掉了。

–relaxed_ansi

-pr

运用编译器的松懈形式。在规范ISO C形式下,大部分语法上的违规会被当作过错输出,然后使得咱们的编译无法继续下去。假如咱们有时需求运用这样的用法的话,就运用松懈形式,使得这些违规被作为正告信息输出,虽然有正告,可是不会阻碍程序的编译。当然咱们要做的验证和承认咱们的程序的确达到了咱们的预期功用。

–rtti

-rtti

运用C++的运转时类型。

–static_template_instantiation

 

运用内部衔接例化一切的模版。

–strict_ansi

-ps

运用严厉的ANSI/ISO C/C++形式,这种形式与K&R版别的C是不兼容的。

  从表2里也能够看出,大部分特性是与C++编程休戚相关的,假如只是运用C进行一些编程的话,对编译器的编程言语选项的运用的确要简略了不少。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/118159.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部