ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GCC 编译C代码的相关选项

2022-01-03 15:00:51  阅读:377  来源: 互联网

标签:选项 __ GCC int 编译 builtin fno inline


GCC 编译C代码的相关选项

来自

https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options

  

-ansi

1、等同于 -std=c90.[ C++语言,等同于 -std=c++98 ]

2、定义宏   __STRICT_ANSI__

3、alloca  ffs 函数 不会再是  built-in 函数。见 Other built-in functions provided by GCC

4、asm  typeof  inline 这几个关键字没有了【这是gnu90的扩展】

5、不再有  unix  vax 宏定义。

6、依然具有  __asm__  __extension__  __typeof__  __inline__ 关键字和 __unix__  __vax__ 宏定义

6、使能 很少使用到的  三元字符组。

7、对于C语言,不再有 // 这个C++ 注释

 

-std=

版本

选项

说明

第一版标准

c89

c90

iso9899:1990

 

初始版本

1994  1996 年技术修订后的

第二版标准

iso9899:199409

AMD1 标准

增加:__STDC_VERSION__ 宏定义

增加:两元字符组 <iso646.h>

第三版标准

c99

iso9899:1999

 

第四版本标准

c11

iso9899:2011

c17

c18

iso9899:2017

iso9899:2018

c11 是标准

c17 是2017年准备好对C11的技术勘误,2018年发布。其实C17 和C18是指同一份技术勘误。

GCC 只支持 技术勘误后的标准。所有C11 C17 C18 是同一个东西。差别仅仅在宏定义 __STDC_VERSION__ 的值不同

 

-aux-info  <filename>

将 函数声明 输出到 <filename> 指定的文件中。可以用于生成头文件。

<filename> 指定的文件 总的内容示例:

 

/* /usr/include/stdio.h:847:NC */ extern void funlockfile (FILE *);

/* /usr/include/stdio.h:858:NC */ extern int __uflow (FILE *);

/* /usr/include/stdio.h:859:NC */ extern int __overflow (FILE *, int);

/* main.c:4:NF */ extern int add (int a, int b); /* (a, b) int a; int b; */

/* main.c:9:NF */ extern int main (void); /* () */

 

 

1、 定义出现的行号

2、 I  N  (指示 new ) 或者  O (指示  old)

3、 C (declaration)  或者 F (definition)

 

 

-fallow-parameterless-variadic-functions

先理解:variadic-function - 变量函数

 

http://www.verydoc.net/c/00000976.html

 

变量函数是一些函数(例如printf),其中需要可变数量的参数。

可变参数函数的声明使用省略号作为最后一个参数,例如 int printf(const char * format,...);. 有关语法和自动参数转换的更多详细信息,请参阅可变参数。

从函数体访问可变参数使用以下库工具:

 

 

再理解   parameterless variadic functions无参数的变量函数 ?

 

即,函数里面参数仅仅只有  …  这个可变参数,没有其他参数。这其实是没有意义的,因为(没有其他参数做为定位)进入函数实现后也无法读取到可变参数的。

 

-fno-asm

1、不再将  asm  inline  typeof 作为关键字。

2、-ansi 选项包含了 -fno-asm 选项

3、依然可以使用   __asm__  __inline__  __typeof__  关键字

4、c99 模式下(-std=c99 or -std=gnu99) 这个选项仅仅 影响  asm  typeof 关键字,不影响 inline ,因为inline 是 c99 标准中规定的关键字(不是gun的扩展)

 

-fno-builtin

-fno-builtin-function 

 

不使用  以 __builtin_  开头的内建函数。

1、 见 Other built-in functions provided by GCC,  获得GCC 内建函数的信息。

2、 内建函数 好处(执行更加高效),坏处(这下函数调用不再存在,无法调试,无法客制化这些函数)   

3、 当GCC 识别到内建函数时,gcc 使用内建函数对应的 先验信息,利用这些先验信息来产生高效的代码。当printf 是内建函数时,调用printf 不当时,产生告警。

4、 使用了 -fno-builtin 或者 -ffreestanding 时,怎么使能 内建函数呢 ?可以使用宏定义。

#define abs(n)          __builtin_abs ((n))

#define strcpy(d, s)    __builtin_strcpy ((d), (s))

 

5、-fno-builtin-function 选项,function 这个函数名称,不能以 __builtin_ 开头; 如果function 函数本身就不是内建函数,这个选项被忽略。

 

 

-fcond-mismatch

允许条件表达式的 第2  3 个参数具有不同的类型。

 

-ffreestanding

编译输出(可执行文件)是运行在一个 freestanding environment 环境下。

这个选项 包含 -fno-builtin 选项。

等同于  -fno-hosted

 

-fgimple

实验性功能

解析 __GIMPLE 标识的函数定义。

 

-fgnu-tm

 

使用 Intel 的 Transactional Memory API specification 的linux 变种。

备注: transactional memory 功能必须要  call exception 功能。即,打开-fno-call-exceptions 后,就无法使用 transactional memory 功能。

 

-fgnu89-inline

在 c99 模式下,使用 传统的 gnu 的 inline 语法。

-fno-gun89-inline ,使用 C99 标准的 inline 语法。

默认使用 c99 的inline 语法

 

-fhosted

生成的可执行程序,运行的 hosted environment 环境下。

 

-flax-vector-conversions

允许 隐式的  不同元素个数的,数据类型不兼容的 vector 之间的转换。

 

新代码中不要使用这个选项。

 

-fms-extensions

 

允许 Microsoft 头文件中的,非标准的 构造函数。

 

这个选项 只有在 ms x86 平台上面才会开启。

 

offload

-foffload=disable

-foffload=default

-foffload=target-list

-foffload-options=options

-foffload-options=target-triplet-list=options

 

https://gcc.gnu.org/wiki/Offloading

 

openaac

-fopenacc

-fopenacc-dim=geom

 

openmp

-fopenmp

-fopenmp-simd

 

-fpermitted-flt-eval-methods=c11 或ts-18661-3

浮点数 计算 取值 方法

详见 

https://www.w3cschool.cn/doc_c/c-types-limits-flt_eval_method.html 

 

-fplan9-extensions

这个选项 会 包含 -fms-extensions

 

-fxxsigned-bitfields

bitfield 定义,默认是 有符号还是无符号,

默认是 有符号的

 

-fxxsigned-char

 

char 定义是有符号还是无符号的。

 

 

-fsso-struct=native|big-endian|little-endian

结构体存储时,按照大端还是小端顺序。默认 native

 

标签:选项,__,GCC,int,编译,builtin,fno,inline
来源: https://www.cnblogs.com/zhangzhiwei122/p/15759530.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有