006.gcc编译器

gcc是什么?

在这里插入图片描述
gcc所遵循的部分约定规则:

.c为后缀的文件,C语言源代码文件; .a为后缀的文件,是由目标文件构成的档案库文件; .C,.cc或.cxx
为后缀的文件,是C++源代码文件且必须要经过预处理; .h为后缀的文件,是程序所包含的头文件; .i
为后缀的文件,是C源代码文件且不应该对其执行预处理; .ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;
.m为后缀的文件,是Objective-C源代码文件; .mm为后缀的文件,是Objective-C++源代码文件;
.o为后缀的文件,是编译后的目标文件; .s为后缀的文件,是汇编语言源代码文件; .S为后缀的文件,是经过预编译的汇编语言源代码文件。

以上内容来自百度百科

查看版本号

-v / --version

产生目标文件

-o

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

指定头文件目录

-I+目录

编译时定义宏

-D

编译优化

-On n=0∼3

  • -O0 - 没有优化
  • -O1 - 缺省值
  • -O3 - 优化级别最高

-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。

提示更多警告信息

-Wall

只编译子程序

-c

-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

生成预处理文件

-E

包含调试信息

-g (gdb调试的时候必须加此参数)

-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

虽然有很多东西但是我们一般执行的命令就是
gcc 或者 g++ -o
示例:

必要的安装包:

sudo apt-get install vim

sudo apt-get install g++
sudo apt-get install gcc

下面测试进行测试g++(gcc同理):

下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:

vim hello.cpp

#include <iostream>  


int main(void){

    std::cout << "hello, world" << std::endl;

    return(0);
}

如果没有设置tab缩进可能会出现下面的情况

在这里插入图片描述

在命令行模式输入:gg=G 自动缩进,变为标准格式。

在这里插入图片描述

程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件:

g++ hello.cpp
若是c语言直接用 gcc而不是g++了。

在这里插入图片描述

编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和 libstdc++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行:

./a.out

在这里插入图片描述

因为有时候一个文件须有多个.c/.cpp需要编译总不能都是a.out吧,所以呢更普遍的做法是通过 -o 选项指定可执行程序的文件名。下面的命令将产生名为 helloworld 的可执行文件:

$ g++ hello.cpp -o hello

在这里插入图片描述

在命令行中输入程序名可使之运行:

./helloworld

hello, world

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值