发布时间:2014-09-21 12:55:54
要理解.c文件与.h文件有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:1.预处理阶段2.词法与语法分析阶段3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息 编译器在编译时是以c文件为单位进行的,也就是说如果你的项目中一个c文件都没有,那么你的项目将无法编译,连接器是以目标文件为单位,它将一个或多个目 标文件进行函数与变量的重定位,生成最终的可执行文件,在P......【阅读全文】
发布时间:2014-09-21 12:55:52
预编译(预处理)就是在正式编译之前的,为正式编译做准备,处理以#开头的指令。1, 在看linux内核代码时会看到某些结构体的定义中包含宏定义:12345678910111213struct i2c_msg { __u16 addr; /* slave address */  ......【阅读全文】
发布时间:2014-09-21 12:55:49
#define MACRO_NAME(para) do{macro content}while(0)的格式,总结了以下几个原因:1,空的宏定义避免warning: #define foo() do{}while(0) 2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现: #define foo(x) \&......【阅读全文】
发布时间:2014-09-21 12:55:45
测试代码:#include <stdio.h>int main(void){ int n = 0; int i = 0; &nbs......【阅读全文】
发布时间:2014-09-21 12:55:42
/*creat a bittree*/#include "stdlib.h"#include "stdio.h"typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;}BiTNode, *BiTree;BiTNode* getnode(){ BiTNode* p; p = (BiTNode*)m......【阅读全文】