编译器中常见的编译选项

本文介绍了在使用GCC编译器时的一些常见选项,包括如何指定输出文件名、启用警告、遵循ANSI标准以及链接数学库。通过示例展示了如何通过编译选项解决编译过程中的问题,例如-Wall选项用于显示警告,-ansi-pedantic选项用于严格遵循ANSI标准,-lm选项用于链接数学库,以及-DDEBUG用于在编译时定义预处理宏。

安装好GCC后,又进一步研究了它的使用。

首先我建立了一个test.cpp的文件。放在电脑的F盘中。源代码如下:

# include <stdio.h>
main()
{
	int a,b;
	scanf("%d%d",&a,&b);
	int c = a+b;
	printf("%d%d\n",c);
	
}

在dos命令行中,编译一下:gcc test.c  程序没有输出,代表一切均好。检查目录(Windows 下用dir),会发现多了一个a.exe,这就是程序的编译结果。




下面的命令会让编译出的可执行程序名为 test.exe : gcc test.cpp -o test。

也许上面的源代码我们能一眼看出哪里出了错误,但当程序复杂时,就不一定了。这时,编译选项就能帮忙:gcc test.cpp -o test -Wall.

这下编译器就会指出3个警告:main 函数没有返回类型、没有返回值、printf的格式字符串可能有问题。




还有一些常用的编译选项:(不会用……╮(╯▽╰)╭写上先留着吧)

-ansi-pedantic:检查代码是否符合ANSI标准(-ansi只是判断是否和ANSI冲突,而-pedantic更加严格)。

它进一步指出了上述代码中的另一个“问题”:ANSI C中不允许临时声明变量,而必须在语句块的首部声明变量。

在C语言中,另一个常用的编译选项是-lm,它让编译器连接数学库,从而允许程序使用math.h中的数学函数。C++编译器会自动连接数学库,

但如果你的程序扩展名是.cpp,且不连接数学库,有时会有意想不到的结果。(啥结果啊(⊙o⊙)…??)

还有一个有用的选项是-DDEBUG,它在编译时定义符号DEBUG(可以换成其它,如-DLOCAL将定义符号LOCAL),这样,位于#ifdef DEBUG和#endif中间的语句会被编译。

而在通常情况下,这些语句将被编译器忽略(注意,不仅是不会执行,连编译都没有进行)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值