编译器中常见的编译选项

来源:互联网 发布:淘宝国际中转站 编辑:程序博客网 时间:2024/06/02 01:05

安装好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中间的语句会被编译。

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


0 0
原创粉丝点击