当前位置: 首页 > news >正文

postgresql gcc编译选项解释

postgresql gcc编译选项解释

在使用make编译时候,输出的gcc选项:

gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -I../../../src/include  -D_GNU_SOURCE   -c -o postgres.o postgres.c

这条命令是用于编译 postgres.c 文件并生成目标文件 postgres.o 的 GCC(GNU Compiler Collection)编译命令。

  • -std=gnu99:指定 C 语言的标准为 GNU 99。
  • -Wall:打开几乎所有的警告信息。这有助于发现代码中的潜在问题。
  • -Wmissing-prototypes:警告那些没有声明原型的函数。这有助于确保函数的接口被明确声明,从而提高代码的可读性和可维护性。
  • -Wpointer-arith:对函数指针或者void *类型的指针进行算术操作时给出警告。

  • -Wdeclaration-after-statement:在C99之前,C语言不允许在代码块的中间声明变量(只能在块的开始处)。这个选项在C99模式下仍然会警告那些将变量声明放在代码块中间的情况,尽管这在C99中是合法的。

  • -Werror=vla:将变长数组(Variable Length Array, VLA)的警告提升为错误。这有助于避免使用可能导致栈溢出的变长数组。

  • -Wendif-labels:警告#else或#endif后面跟标识符。默认开启。

  • -Wmissing-format-attribute:警告那些应该使用format属性但未使用的函数(如printfscanf等函数的参数)。这有助于确保字符串格式化函数的参数类型正确。

  • -Wformat-security:检查格式字符串中的潜在安全问题,如缓冲区溢出。

  • -fno-strict-aliasing:禁用严格的别名规则。这允许编译器进行某些优化,但可能会引入一些难以发现的错误,特别是在涉及指针类型转换时。

  • -fwrapv:在整数运算溢出时,将结果包装(wrap around)到其表示范围内,而不是产生未定义行为。

  • -fexcess-precision=standard:控制浮点数的精度。这个选项确保在浮点运算中遵循C标准的规定,而不是使用可能更高精度的硬件特性。

  • -O2:启用优化选项 2。这会提高代码的运行速度,但可能会稍微增加编译时间。

  • -I:添加包含文件(头文件)的搜索路径。这意味着编译器会在这个路径下查找 #include 指令指定的文件。

  • -D_GNU_SOURCE:定义 _GNU_SOURCE 宏。这会让编译器和链接器包括 GNU 特有的特性,如一些 GNU C 库中的扩展函数。

-Wpointer-arith举例

#include <stdio.h>  // 函数声明  
int add(int a, int b);  
int subtract(int a, int b);  // 函数指针类型定义  
typedef int (*Operation)(int, int);  // 使用函数指针的示例函数  
int calculate(Operation op, int a, int b) {  return op(a, b);  
}  // 函数实现  
int add(int a, int b) {  return a + b;  
}  int subtract(int a, int b) {return a - b;  
}  int main() {  Operation op1 = add;Operation op2 = subtract;Operation op3 = add + 1;//对函数指针进行运算printf("%d + %d = %d\n", 5, 3, calculate(op1, 5, 3));  printf("%d - %d = %d\n", 5, 3, calculate(op2, 5, 3));  return 0;  
}

gcc -Wpointer-arith -c hello.c

hello.c: In function ‘main’:
hello.c:27:25: warning: pointer to a function used in arithmetic [-Wpointer-arith]Operation op3 = add + 1;//对函数指针进行运算

-Wdeclaration-after-statement

#include <stdio.h>int main(int argc, char *argv[]) {int var = 10;printf("var = %d\n", var);int var1 = 10; // 声明在语句之后,将会报错printf("var1 = %d\n", var1);return 0;
}

gcc -Wdeclaration-after-statement hello.c

hello.c: In function ‘main’:
hello.c:6:5: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]int var1 = 10; // 声明在语句之后,将会报错^

-Wendif-labels

#include <stdio.h>int main()
{
#if FOO
//...
//...
#endif FOOreturn 0;
}

默认就是开启的。

相关文章:

  • jinaai/jina-embeddings-v2-base-zh向量模型报错解决
  • 从 0 到 1:互联网产品经理核心技能全解析
  • php thinkphp 小程序发送订阅模板消息通知
  • 如何给多台Linux机器设置时间同步
  • Power Platform开发小技巧,一天一个APP, 如何快速搭建二维码识别器
  • 深度学习:(五)初识神经网络
  • Git 提交规范
  • 基于PHP+MySQL组合开发地方门户分类信息网站源码系统 带完整的安装代码包以及搭建部署教程
  • 测试用例的举例
  • Xcode 16 上传AppStore遇到第三方库 bitcode 的问题
  • django drf 过滤器
  • 字符编码发展史4 — Unicode与UTF-8
  • 2024 CSP 游记
  • 用Flutter几年了,Flutter每个版本有什么区别?
  • 数据结构与算法——Java实现 20.习题——二叉树层序遍历
  • [译] 怎样写一个基础的编译器
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • HashMap ConcurrentHashMap
  • learning koa2.x
  • LeetCode算法系列_0891_子序列宽度之和
  • Material Design
  • Mybatis初体验
  • PHP CLI应用的调试原理
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • TypeScript迭代器
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vue学习第二天
  • webpack入门学习手记(二)
  • 仿天猫超市收藏抛物线动画工具库
  • 延迟脚本的方式
  • 因为阿里,他们成了“杭漂”
  • 用mpvue开发微信小程序
  • 正则表达式
  • nb
  • 你对linux中grep命令知道多少?
  • 从如何停掉 Promise 链说起
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #14vue3生成表单并跳转到外部地址的方式
  • #HarmonyOS:软件安装window和mac预览Hello World
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (2.2w字)前端单元测试之Jest详解篇
  • (4)(4.6) Triducer
  • (js)循环条件满足时终止循环
  • (PySpark)RDD实验实战——求商品销量排行
  • (备份) esp32 GPIO
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)图像的%2线性拉伸
  • (转)EOS中账户、钱包和密钥的关系
  • (转)scrum常见工具列表
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)OpenStack Hacker养成指南