1. gcc
编译器编译的完整流程,分别有什么作用?
gcc
编译器编译的完整流程有四步,分别是
预处理、编译、汇编、链接
预处理
:处理源文件中的
#ifdef
、
#include
、
#define
等预处理命令,该阶段会生成一个中间文件
.i
gcc
- E
hello.c–o
#
可以使用
-E
选项生成
.i
文件
编译
:
gcc
把预处理后的结果编译成汇编语言代码,输入的是
.i
,编译后生成汇编语言文件
.s
gcc
- S
hello.i –o hello.s
汇编
:编译器把编译出来的汇编语言汇编成具体
CPU
上的目标代码(机器代码)。输入汇编代码文
件
.s
,输出目标代码文件
.o
或
.obj。
gcc
– c hello.s –o hello.o
链接
:把多个目标代码模块链接成一个大的目标代码模块。输入目标代码文件
.o
(与其它的目标
代码文件、库文件、引导代码),汇集成一个可执行的二进制代码文件。
gcc
hello.o –o hello
2.
什么是回调函数?
回调函数就是一个通过函数指针调用的函数。所以当一个函数作为参数使用的时候
,
这个函数就是
回调函数。
3.
地址能否使用
printf
函数中的
%u
形式打印?
可以,但是还是
%p
是最标准的。
4.
结构体与共用体的区别
首先结构体与共用体都是构造型数据类型,它们的成员变量都可以定义为不同类型的。
结构体可以同时存储多种变量类型,而共同体同一个时间只能存储和使用多个变量类型的一种,当
另一时间,变量类型被改变后,原来的变量类型和值将被舍弃。
共用体的作用是同一个数据项可以使用多种格式,可以节省空间。
结构体与共用体的主要区别在于存储方式的不同:
结构体在定义后,声明变量时系统为该变量申请内存空间为所有成员变量所占用的内存空间之和。
共用体变量声明时,变量占有空间不变,在同一时间,只能存储某一个成员的信息。
5. static
、
const
、
volatile
关键字有什么作用?
static
(