
1.2.3 C语言编译器
在POSIX兼容的系统中,C语言编译器被称为c89。历史上,C语言编译器被简称为cc。许多年来,不同厂商销售的类UNIX系统中所带的C语言编译器均包含不同的功能和选项,但它们一般都称为cc。
在准备起草POSIX标准时,事实上已经不可能制订出兼容所有厂商的标准cc命令了。于是,POSIX委员会决定为C语言编译器创建新的标准命令,这就是c89。只要使用这个命令,在任何机器上,它的编译选项都相同。
Linux系统尽量实现这些标准。在Linux系统中,你会发现c89、cc和gcc这些命令全部或部分地指向系统的C语言编译器,通常是GNU C编译器,或gcc。在UNIX系统中,C语言编译器几乎总被称为cc。
在本书中,我们将使用gcc,这是因为它随Linux的发行版一起提供,并且它支持C语言的ANSI标准语法。如果你发现你的UNIX系统中没有gcc,我们建议你设法获取并安装它。你可以在http://www.aIhUaU.com找到它。我们在本书中用到gcc之处,你都可以直接将其替换为你的系统中C语言编译器相应的命令。
实 验 你的第一个Linux C语言程序
在本例中,通过编写、编译和运行你的第一个Linux程序来开始Linux的C语言程序开发之旅。还是从最有名的Hello World程序开始吧。
(1) 下面是文件hello.c的源代码:
[TR]
[TD][I]498)this.width=498;' onmousewheel = 'javascript:return big(this)' height=226 alt="" src="http://pic.aIhUaU.com/201602/15/141624352.jpg" width=335 border=0>[/TD][/TR]
[TR][/TR](2) 编译、链接和运行程序。
[TR]
[TD][I]498)this.width=498;' onmousewheel = 'javascript:return big(this)' height=104 alt="" src="http://pic.aIhUaU.com/201602/15/141752594.jpg" width=301 border=0>[/TD][/TR]
[TR][/TR]
你调用GNU C语言编译器(在Linux中,大多数情况下用cc也可以)将C语言源代码转换为可执行文件hello。然后运行这个程序,它将打印出欢迎信息。虽然这只是最简单的一个例子,但如果在你的系统上能做到这一点,你就能编译、运行本书中以后所有的例子了。如果无法完成上述操作,请检查你的系统以确保已安装了C语言编译器。例如,许多Linux发行版有个名为Software Development(软件开发)的安装选项(或类似选项),你应该在Linux系统安装过程中选中该项,从而确保安装了所需的软件包。
因为这是你运行的第一个程序,所以有些问题最好现在就指出来。hello程序很可能在你的家目录中。如果PATH变量不包含指向你的家目录的条目,shell就找不到hello程序。更进一步,如果PATH变量中包含的其中一个目录包含另一个名为hello的程序,shell就会执行那个程序。如果PATH中这样的目录出现在你的家目录之前,这种情况也会发生。为了避免这种潜在的问题,你可以在程序名前加上一个./(例如./hello)。它特别指示shell去执行当前目录下给定名称的程序。(符号.代表当前目录。)
如果你忘记用-o name选项告诉编译器可执行程序的名字,编译器就会把程序放在一个名为a.out的文件里(a.out的含义是assembler output,即汇编输出)。如果你确信编译了一个程序但又找不到它,别忘了看看有没有a.out文件!在UNIX的早期历史中,想在系统上玩游戏的人通常把游戏作为a.out来运行,以避免被系统管理员捉到,因此一些UNIX系统每晚会定期地删除所有名为a.out的文件。