Linux 遵循 GNU 通用公共许可证(GPL),任何个人和机构都可以自由地使用
Linux 的所有底层源代码,也可以自由地修改和再发布。
由于 Linux 是自由软件,任何人都可以创建一个符合自己需求的 Linux 发行版。
1.遵循GNU/GPL
2.开放
3.多用户
4.多任务
5.安全性高
6.可移植
GNU编译工具GCC,支持多种编程语言,包括C,C++,Java....
支持多种平台,包括Unix,Lunix,windows.
1.编译 vi *.c ,创建相关开发文件
2.预编译 gcc -E *.c -o *.i ,对代码种相关的预编译指令进行相关处理
3. 编译 gcc -S *.i ,将生成相应*.s的汇编文件
4. 汇编 gcc -c *.s ,生成相应的二进制文件,能够被机器所识别
5. 链接 gcc *.o -o * ,生成可以执行文件
1. .h 代码头文件
2. .c c语言代码文件
3. .a 静态库文件
4. .so 动态库文件
1.#include // 将指定文件的内容插至此指令处
2.#include_next // 与#include一样,但从当前目录之后的目录查找,极少用
3.#define // 定义宏
4.#undef // 删除宏
5.#if // 判定
6.#ifdef // 判定宏是否已定义
7.#ifndef // 判定宏是否未定义
8.#else // 与#if、#ifdef、#ifndef结合使用
9.#elif // else if多选分支
10.#endif // 结束判定
11.## // 连接宏内两个连续的字符串
12.# // 将宏参数扩展成字符串字面值
13.#error // 产生错误,结束预处理
14.#warning // 产生警告
15.#pragma // 提供额外信息的标准方法,可用于指定平台
16.#pragma GCC dependency <文件> // 若<文件>比此文件新则产生警告
17.#pragma GCC poison <标识> // 若出现<标识>则产生错误
18.#pragma pack(1/2/4/8) // 按1/2/4/8字节对齐补齐
19.#line // 指定行号
1.__BASE_FILE__ // 正在编译的源文件名
2.__FILE__ // 所在文件名
3.__LINE__ // 行号
4.__FUNCTION__ // 函数名
5.__func__ // 同__FUNCTION__
6.__DATE__ // 日期
7.__TIME__ // 时间
8.__INCLUDE_LEVEL__ // 包含层数,从0开始
9.__cplusplus // C++编译器将其定义为1,
10. // C编译器不定义该宏
1.声明外部变量,函数和类
2.定义宏,类型别名和自定义类型
3.包含其他头文件
4.设置头文件卫士,防止同一个头文件被多次包含
头文件卫士:#ifndef ***** //通过宏定义来判断头文件是否被反复调用
#define ***
#endif
include<>和include " "两者需要分清搜索范围,后者范围更大,不仅会在-I指定的目录和系统目录下寻找,还会在当前目录下
1. #include "***/****/****/*.h" ,多级目录下的头文件,这种方式易懂,但是一旦头文件位置发生改变,那么代码中就需要同步修改,不便于开发
2. 通过环境变量C_INCLUDE_PATH或者CPATH来设置C的头文件,这种方式便捷,但是在多工程情况下,可能发生冲突,无法定位到正确的头文件。
3. gcc -I 通过编译指令指定相应的头文件,是最合适的。