对于计算机语言的学习,我们需要学习(1)基本的程序设计的思想;(2)语言工具的特性。基本的程序设计思想是对所有程序设计语言而言的,是通用的;而语言工具的特性是针对具体的语言而言的,是每种语言独特的。这里我们关注的是语言工具的特性。c语言的工具特性为:(1)对于底层的操作,如对内存地址的寻址和操作,对指针的使用;
对于c语言的学习,重视:(1)c语言的设计思想,与核心规律;(2)理解掌握,什么时候用?什么时候用?为什么要这样设计?
一:GCC的使用和常用选项
1、gcc概述
gcc起初的名字为GNU c compile,后来随着支持的语言变多,变为GNU compile collection。gcc是可以理解为翻译官,翻译组织,包含有翻译成员。不同成员之间相互配合,完成人与人之间交流的语言转变为机器可以识别的二进制指令,在计算机上执行,也就是人与机器之间交流的桥梁。常用的指令选项有:(1)gcc -o output mian.c (2)gcc -c -o main.o main.c (3)gcc -S -o main.s main.c (4)gcc -E -o main.i main.c (5) gcc -I 包含头文件的路径
可以使用gcc -v -o build main.c 命令查看整个编译链接的过程。整个过程分为(1)预处理(2)编译(3)汇编(4)链接
2、c语言的编译过程
预处理:
cpp -o main.i main.c
在查看整个编译链接的过程中看不到,在命令cc1执行中包含了该命令的执行。
实际使用命令:gcc -E -o main.i main.c
编译:
/usr/lib/gcc/i486-linux-gnu/4.4.3/cc1 -quiet -v main.c -o /tmp/ccW03FvH.s .....(还有一些其他选项)
实际使用命令:gcc -S -o main.s main.c
汇编:
as -V -Qy -o /tmp/cctZ6SQm.o /tmp/ccW03FvH.s
实际使用命令:gcc -c -o main.o main.s
链接:
lib/gcc/i486-linux-gnu/4.4.3/collect2 -o build main.o .....(还有很多其他的.o,自己的或者系统的)
实际使用命令:gcc -o build main.c
3、编译过程中的一些常见错误
预处理错误:#include<>(引用库中的头文件);#include ""(引用自己写的头文件),可能会出现找不到文件的错误。<>表示到系统的环境变量中去找,“”表示在当前目录中寻找文件。自己写的头文件可以放到一个目录下,用gcc -I 添加查找头文件的目录。
编译错误:常见语法错误
链接错误:(1)原材料不够,查找的函数具体实现没有被链接进来(2)原材料多余,查找的函数具体实现重复了
4、宏的使用
#include
#define
#ifdef #else #endif
预定义宏:__FUNCTION__ __LINE__ __FILE__
调试版本和发行版本的处理:(1)在文件中通过添加#define ABC进行条件预编译处理,添加或者去除处理;(2)通过命令 gcc -DABC 处理,-D后面不能有空格。两者否需要在其他处用#ifdef #else #endif 实现处理
#define 定义函数和使用,实现的原理类似于python的lamda函数。#号实现字符串化,##号实现连接,相当于前缀后缀。