c /c++复习笔记 第一天

4 篇文章 0 订阅
4 篇文章 0 订阅

基础知识回归、总结、整理

GNU编译工具GCC


1. 支持多种编程语言

~~~~~~~~~~~~~~~

C、C++、Objective-C、Java、Fortran、Pascal、Ada

2. 支持多种平台

~~~~~~~~~~~

Unix、Linux、Windows。

3. 构建(Build)过程

~~~~~~~~~~~~~~

编辑 -> 预编译 -> 编译 -> 汇编 -> 链接

1) 编辑: vi hello.c -> hello.c
2) 预编译:gcc -E hello.c -o hello.i -> hello.i -+
3) 编译: gcc -S hello.i -> hello.s | GCC
4) 汇编: gcc -c hello.s -> hello.o | 工具链
5) 链接: gcc hello.o -o hello -> hello -+

范例:hello.c

4. 查看版本

~~~~~~~

gcc -v

5. 文件后缀

~~~~~~~

.h - C语言源代码头文件
.c - 预处理前的C语言源代码文件
.i - 预处理后的C语言源代码文件
.s - 汇编语言文件
.o - 目标文件
.a - 静态库文件
.so - 共享库(动态库)文件

6. 编译单个源程序

~~~~~~~~~~~~~

gcc [选项参数] 文件

-c - 只编译不链接。
-o - 指定输出文件。
-E - 预编译。
-S - 产生汇编文件。
-pedantic - 对不符合ANSI/ISO C语言标准的
扩展语法产生警告。
-Wall - 产生尽可能多的警告。
范例:gcc -Wall wall.c
-Werror - 将警告作为错误处理。
范例:gcc -Werror werror.c
-x - 指定源代码的语言。
范例:gcc -x c++ cpp.c -lstdc++
-g - 生成调试信息。
-O1/O2/O3 - 优化等级。

7. 编译多个源程序

~~~~~~~~~~~~~

gcc [选项参数] 文件1 文件2 …

思考:头文件的作用是什么?

1) 声明外部变量、函数和类。
2) 定义宏、类型别名和自定义类型。
3) 包含其它头文件。
4) 借助头文件卫士,防止因同一个头文件被多次包含,
而引发重定义错。

包含头文件时需要注意:

1) gcc的-I选项

指定头文件附加搜索路径。

2) #include <…>

先找-I指定的目录,再找系统目录。

3) #include “…”

先找-I指定的目录,再找当前目录,最后找系统目录。

4) 头文件的系统目录

/usr/include
/usr/local/include
/usr/lib/gcc/i686-linux-gnu/4.6.3/include
/usr/include/c++/4.6.3 (C++编译器优先查找此目录)

8. 预处理指令

~~~~~~~~~

#include      // 将指定文件的内容插至此指令处
#include_next // 与#include一样,
              // 但从当前目录之后的目录查找,极少用
#define       // 定义宏
#undef        // 删除宏
#if           // 判定
#ifdef        // 判定宏是否已定义
#ifndef       // 判定宏是否未定义
#else         // 与#if、#ifdef、#ifndef结合使用
#elif         // else if多选分支
#endif        // 结束判定
##            // 连接宏内两个连续的字符串
#             // 将宏参数扩展成字符串字面值

#error   // 产生错误,结束预处理
#warning // 产生警告
  1. 预定义宏
    ~~~~~~~
__BASE_FILE__     // 正在编译的源文件名
__FILE__          // 所在文件名
__LINE__          // 行号
__FUNCTION__      // 函数名
__func__          // 同__FUNCTION__
__DATE__          // 日期
__TIME__          // 时间
__INCLUDE_LEVEL__ // 包含层数,从0开始
__cplusplus       // C++编译器将其定义为1,
                  // C编译器不定义该宏


# gcc predef.c

__BASE_FILE__     : predef.c
__FILE__          : print.h
__LINE__          : 9
__FUNCTION__      : print
__func__          : print
__DATE__          : May 25 2013
__TIME__          : 07:31:39
__INCLUDE_LEVEL__ : 2

# g++ predef.c

__BASE_FILE__     : predef.c
__FILE__          : print.h
__LINE__          : 9
__FUNCTION__      : print
__func__          : print
__DATE__          : May 25 2013
__TIME__          : 07:32:33
__INCLUDE_LEVEL__ : 2
__cplusplus       : 1
  1. 环境变量
    ~~~~~~~~

C_INCLUDE_PATH - C头文件的附加搜索路径,
相当于gcc的-I选项。
CPATH - 同C_INCLUDE_PATH。
CPLUS_INCLUDE_PATH - C++头文件的附加搜索路径。
LIBRARY_PATH - 链接时查找静态库/共享库的路径。
LD_LIBRARY_PATH - 运行时查找共享库的路径。

通过gcc的-I选项指定C/C++头文件的附加搜索路径:

# gcc calc.c cpath.c -I.

将当前目录作为C头文件附加搜索路径,
添加到CPATH环境变量中:

# export CPATH=$CPATH:. // export保证当前shell的
                        // 子进程继承此环境变量
# echo $CPATH
# env | grep CPATH

也可以在~/.bashrc或~/.bash_profile
配置文件中写环境变量,持久有效:

export CPATH=$CPATH:.
执行
# source ~/.bashrc# source ~/.bash_profile
生效。以后每次登录自动生效。

头文件的三种定位方式:

1) #include “目录/xxx.h” - 头文件路径发生变化,
需要修改源程序。
2) C_INCLUDE_PATH/CPATH=目录 - 同时构建多个工程,
可能引发冲突。
3) gcc -I目录 - 既不用改程序,
也不会有冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值