对于执行 C
或者 C++
程序,需要借助 gcc
(g++
)指令来调用 GCC
编译器。
- 对于以
.c
为扩展名的文件,GCC
会自动将其视为C
源代码文件 - 对于以
.cpp
为扩展名的文件,GCC
会自动将其视为C++
源代码文件
1. GCC自动识别的文件扩展名
除此之外,GCC
编译器还可以自动识别多种扩展名,如下表所示,即根据不同的扩展名确定该文件该怎样编译。
注意,上表仅罗列了 GCC
编译器可识别的与 C
和 C++
语言相关的文件后缀名。除此之外,GCC
编译器还支持 Go
、Objective-C
等编程语言的编译。详情请参考 GCC官网
如果当前文件的扩展名和上表 ,还能使用 GCC
编译器吗?答案是肯定的。只需要借助 -x
选项(小写)指明当前文件的类型即可。
示例 test 文件
#include <iostream>
int main()
{
std::cout << "hello,world" << std::endl;
return 0;
}
显然,这是一段完整的 C++
语言程序,但由于其存储在无扩展名的 test
文件中,如果直接使用 g++
指令调用 GCC
编译器,则执行会报错:
wohu@ubuntu:~/cpp/src$ g++ test
test: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
wohu@ubuntu:~/cpp/src$
可以看到,GCC
编译器无法识别 test
这个文件。这种情况下,就必须使用 -x
选项手动为其指定文件的类型,例如:
wohu@ubuntu:~/cpp/src$ g++ -xc++ test
wohu@ubuntu:~/cpp/src$ ls
a.out test
wohu@ubuntu:~/cpp/src$ ./a.out
hello,world
wohu@ubuntu:~/cpp/src$
可以看到,通过为 g++
指令添加 -xc++
选项,表明当前 test 为 C++
语言程序文件,由此 GCC
编译器即可成功将其编译为 a.out
可执行文件。
-x
指令参数的含义:
-xc
:指定 C 语言文件-xc++
:指定 C++ 语言文件-xc-header
:C 语言头文件-xc++-heade
:C++ 程序头文件
2. GCC -std 编译标准支持项
对于编译 C
、C++
程序来说,借助 -std
选项即可手动控制 GCC
编译程序时所使用的编译标准。也就是说,
- 当使用
gcc
指令编译C
语言程序时,我们可以借助-std
选项指定要使用的编译标准; - 当使用
g++
指令编译C++
程序时,也可以借助-std
选项指定要使用的编译标准;
-std
选项的使用方式很简单,其基本格式如下:
gcc/g++ -std=编译标准
示例如下:
g++ test.cpp -o test -std=c++11
注意,不同版本的 GCC
编译器,所支持使用的 C/C++
编译标准也是不同的。
注意,表头表示的是各个编译标准的名称,而表格内部的则为 -std 可用的值,例如 -std=c89、-std=c11、-std=gnu90 等(表 2 也是如此)。