c /c++复习笔记 第一天
2017-02-09 14:46
267 查看
基础知识回归总结整理
GNU编译工具GCC
支持多种编程语言
支持多种平台
构建Build过程
查看版本
文件后缀
编译单个源程序
编译多个源程序
预处理指令
头文件的三种定位方式
C、C++、Objective-C、Java、Fortran、Pascal、Ada
Unix、Linux、Windows。
编辑 -> 预编译 -> 编译 -> 汇编 -> 链接
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
gcc -v
.h - C语言源代码头文件
.c - 预处理前的C语言源代码文件
.i - 预处理后的C语言源代码文件
.s - 汇编语言文件
.o - 目标文件
.a - 静态库文件
.so - 共享库(动态库)文件
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 - 优化等级。
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++编译器优先查找此目录)
预定义宏
~~~~~~~
环境变量
~~~~~~~~
C_INCLUDE_PATH - C头文件的附加搜索路径,
相当于gcc的-I选项。
CPATH - 同C_INCLUDE_PATH。
CPLUS_INCLUDE_PATH - C++头文件的附加搜索路径。
LIBRARY_PATH - 链接时查找静态库/共享库的路径。
LD_LIBRARY_PATH - 运行时查找共享库的路径。
通过gcc的-I选项指定C/C++头文件的附加搜索路径:
将当前目录作为C头文件附加搜索路径,
添加到CPATH环境变量中:
也可以在~/.bashrc或~/.bash_profile
配置文件中写环境变量,持久有效:
需要修改源程序。
2) C_INCLUDE_PATH/CPATH=目录 - 同时构建多个工程,
可能引发冲突。
3) gcc -I目录 - 既不用改程序,
也不会有冲突。
GNU编译工具GCC
支持多种编程语言
支持多种平台
构建Build过程
查看版本
文件后缀
编译单个源程序
编译多个源程序
预处理指令
头文件的三种定位方式
基础知识回归、总结、整理
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 // 产生警告
预定义宏
~~~~~~~
__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
环境变量
~~~~~~~~
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目录 - 既不用改程序,
也不会有冲突。
相关文章推荐
- 复习笔记二 二叉排序树(C++ C#)
- C++复习笔记
- C++复习笔记01
- 第一天接触ui感觉有点乱啊,今天只有笔记,明天复习敲完代码在发代码
- effective C++第六章 复习笔记
- c++复习笔记--c++语言程序设计题典
- 《C++ Primer Plus》12.6 复习各种(类和动态内存分配的)技术 笔记
- c++ 复习笔记
- C++要点复习笔记
- C++复习笔记
- 复习C++ 走一遍基础 留下笔记----{一}
- 复习C++ 走一遍基础 留下笔记----{六}
- 复习C++ 走一遍基础 留下笔记----{五}
- C/C++学习笔记第一天:MAC OS下搭建GCC和Sublime Text环境
- 新分类:C++复习笔记
- 【复习笔记】C++复习笔记一
- 复习C++ 走一遍基础 留下笔记----{四}
- C++学习笔记第一天:熟悉C++,解决“Cannot find or open the PDB file”问题
- c++第一天笔记(上)
- C++复习笔记