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;
}

默认就是开启的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144928.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

谷歌女高管被裁员,3份兼职越干越开心!55岁正是闯的年纪!

在职场的金字塔顶端&#xff0c;那些大龄女性高管正在面对一场无形却深刻的危机。曾经&#xff0c;她们凭借坚定的决心和无畏的勇气&#xff0c;在职场中披荆斩棘&#xff0c;闯出了一片天地。 现代职场的年轻化和技术更新正将她们逐渐推向边缘。裁员通知的突如其来&#xff0…

Leetcode面试经典150题-97.交错字符串

给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串 &#xff1a; s s1 s2 ... snt t1 t2 ... tm|n - m| < 1交错 是…

好的头戴式降噪耳机一定很贵吗?四款热门头戴耳机盘点及推荐!

在快节奏的现代生活中&#xff0c;噪音无处不在&#xff0c;它常常干扰着我们的工作、学习与休闲时光。而一款高性价比的降噪蓝牙耳机&#xff0c;就如同一个贴心的伙伴&#xff0c;能为我们营造出一片宁静的听觉空间。如今&#xff0c;耳机市场蓬勃发展&#xff0c;想要好的头…

第161天:安全开发-Python-红队项目漏扫调用API推送微信任务自动添加并启动

目录 案例一&#xff1a;Python-红队项目-Xray调用推送微信 案例二&#xff1a;Python-红队项目-Awvs 调用自动添加 案例三&#xff1a; Python-红队项目-SQLMAP 调用自动添加 案例一&#xff1a;Python-红队项目-Xray调用推送微信 首先本地测试调用api发送信息给微信 api…

面试复盘与 AI 大模型学习

面试相关 一、面试公司与岗位信息 面试公司&#xff1a;顺丰科技面试岗位&#xff1a;AI 方向产品经理工作地点&#xff1a;深圳面试结果&#xff1a;通过&#xff0c;但放弃了该 offer 二、面试过程 整体情况 整个暑期实习面试之旅包含三轮&#xff0c;其中两轮是专业面试…

OpenAI o1解决了Quiet-STaR的挑战吗?(下)

随着OpenAI o1近期的发布&#xff0c;业界讨论o1关联论文最多之一可能是早前这篇斯坦福大学和Notbad AI Inc的研究人员开发的Quiet-STaR&#xff0c;即让AI学会先安静的“思考”再“说话” &#xff0c;回想自己一年前对于这一领域的思考和探索&#xff0c;当初也将这篇论文进行…

选择Alluxio来解决AI模型训练场景数据访问的五大理由

在AI模型训练尤其是大模型领域&#xff0c;存储系统的性能和稳定性直接决定了模型训练、推理、部署任务的效率和成本。随着全球AI行业的爆发带来的数据规模的快速增长&#xff0c;如何高效管理和利用这些数据成为AI模型训练中的一大挑战。 AI模型训练场景面临的五大难题 1. 数…

Yolov8-pose关键点检测:一种新的自适应算法轻量级通道分割和变换(ALSS)模块,解决红外检测场景存在严重遮挡和重叠目标时的局限性

💡💡💡本文解决什么问题:红外检测场景存在严重遮挡和重叠目标时的局限性的问题点。 💡💡💡提出了一种新的自适应算法轻量级通道分割和变换(ALSS)模块。该模块采用自适应信道分裂策略优化特征提取,并集成信道变换机制增强信道间的信息交换。这改善了模糊特征的提…

小阿轩yx-SaltStack部署与应用基础

小阿轩yx-SaltStack部署与应用基础 前言 当今数字化时代&#xff0c;大规模 IT 系统的管理已经成为一个复杂而繁琐的任务。为了提高系统管理的效率和准确性&#xff0c;自动化工具成为各企业不可或缺的一部分。Saltstack 作为一款强大的自动化和配置管理工具&#xff0c;在业…

AI服务器是什么?为什么要用AI服务器?

AI服务器的定义 AI服务器是一种专门为人工智能应用设计的服务器&#xff0c;它采用异构形式的硬件架构&#xff0c;通常搭载GPU、FPGA、ASIC等加速芯片&#xff0c;利用CPU与加速芯片的组合来满足高吞吐量互联的需求&#xff0c;为自然语言处理、计算机视觉、机器学习等人工智…

巧用联合与枚举:解锁自定义类型的无限潜力

嘿嘿,家人们,今天咱们来详细剖析C语言中的联合与枚举,好啦,废话不多讲,开干! 目录 1.:联合体 1.1:联合体类型的声明 1.1.1:代码1 1.1.2:代码2(计算机联合体的大小) 1.1.3:代码3 1.2:联合体的特点 1.2.1:代码1 1.2.2:代码2 1.3:相同成员的结构体与联合体进行对比 1.3…

【SA8155P】AIS Camera相关内容的简单介绍

高通车载相机模块(AIS,Automotive lmage System)是专门针对车载系统特性而设计的一套车载视觉架构,可用于AVM、RVC、DMS等常见车载视频应用开发。车载Camera系统的图像大部分是给自动驾驶等使用,更多考虑的是远距离传输、多摄像头图像处理等场景。 本文仅对AIS Camera相关…

国庆头像制作教程,这几种方法轻松制作国庆头像

随着国庆佳节的临近&#xff0c;朋友圈里是不是已经开始弥漫着浓浓的节日气氛&#xff1f;想要让你的头像也加入这场盛宴&#xff0c;成为最吸睛的存在吗&#xff1f;别急&#xff0c;今天就为你揭秘4款超实用的头像制作神器&#xff0c;能够让你的头像显现出浓郁的国庆节气氛&…

竹云董事长董宁主持2024深商千人中秋晚会

9月13日&#xff0c;由深商会主办“湾区升明月&#xff0c;深商共此时”2024深商中秋千人晚会在洲际酒店隆重举行&#xff0c;TCL 集团、农商银行、资本运营集团、泸州老窖、中集车辆、三诺集团、雷曼光电、置富控股、顺络电子、北科生物、霖峰投资、中国南玻集团、兆驰股份、山…

如何衡量品牌在社媒平台的投放效果?

企业去评估在社媒上的投放效果&#xff0c;不仅仅是看投放内容数据、最终销量如何&#xff0c;要从数据去分析更深纬度的效果。比如对于整体品牌声量的提升&#xff0c;品牌行业占有率的上涨&#xff0c;品牌口碑的优化等等。我们可以用声量通对企业多平台上整体的品牌声量情况…

【数据结构-差分】力扣1589. 所有排列中的最大和

有一个整数数组 nums &#xff0c;和一个查询数组 requests &#xff0c;其中 requests[i] [starti, endi] 。第 i 个查询求 nums[starti] nums[starti 1] … nums[endi - 1] nums[endi] 的结果 &#xff0c;starti 和 endi 数组索引都是 从 0 开始 的。 你可以任意排列…

迁移学习+多模态融合,小白轻松发一区!创新性拉满!

多模态研究如今愈发火热&#xff0c;已成为各大顶级会议的投稿热门。今天&#xff0c;我为大家提供一个多模态的创新思路&#xff1a;迁移学习与多模态融合。 迁移学习多模态融合方向的优势 1.提升模型性能&#xff1a;综合更多维度优势&#xff0c;跨模态互补 2.快速适应新…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL17

用3-8译码器实现全减器 描述 请使用3-8译码器和必要的逻辑门实现全减器&#xff0c;全减器接口图如下&#xff0c;A是被减数&#xff0c;B是减数&#xff0c;Ci是来自低位的借位&#xff0c;D是差&#xff0c;Co是向高位的借位。 3-8译码器代码如下&#xff0c;可将参考代码添…

基于Java的房地产在线营销管理系统研究与实现

目录 前言 功能设计 系统实现 获取源码 博主主页&#xff1a;百成Java 往期系列&#xff1a;Spring Boot、SSM、JavaWeb、python、小程序 前言 随着信息技术的迅猛发展&#xff0c;互联网已经渗透到我们生活的方方面面&#xff0c;为各行各业带来了前所未有的变革。房地产…

Fiddler的下载(带安装包和安装配置教程)

1.安装包下载 1.1官网下载 https://www.telerik.com/download/fiddler 填上相应的信息即可 1.2安装包下载 安装包地址 提取码&#xff1a;uq2n 2.安装 选择路径 3.使用 3.1配置支持抓https的包 配置成功!!&#xff01;如果还是抓不到 重启一下&#xff01; 3.2抓包 双…