写出Bool、int、指针变量、float与“零值”比较的if语句 Bool型: if(flag)、if(!flag) int型: if(flag == 0)、if( flag!= 0) 指针变量: if(p == NULL)、if( p!= NULL) float型: const float EPSINON = 0.0001; if( (x >= -EPSINON) && (x <= EPSINON)); 设置地址未为0x67a9的整型变量的值为0xaa66
int *prt;
ptr = (int *)0x67a9;
*ptr = 0xaa66;
*(int *)0x67a9 = 0xaa66;
要对绝对地址赋值,我们可以用(unsigned int*)0x10000=1234,那么要想程序跳转到绝对地址是0x10000去执行,应该怎么做?
先强制转换成函数指针:(void(*)())0x10000; 再调用它:*( ( void(*)( ) )0x10000 )(); 描述一下gcc的编译过程 gcc编译过程分为4个阶段:预处理、编译、汇编、链接 预处理:进行头文件、宏定义的替换,条件编译,删除注释,还有语义和词义的分析 编译:将预处理后的文件编译成汇编文件 汇编:将汇编文件转换二进制文件 链接:将二进制文件链接成可执行文件 #include< >和#include" "的区别 #include< >是到系统指定目录下寻找文件; #include" "是先到用户指定的目录下寻找文件,找不到就到系统指定目录下寻找 头文件中的ifndef/define/endif 干什么用 防止头文件被重复引用。
有符号与无符号的区别 有符号的数据,最高位为符号位,0表示正数,1表示负数; 无符号的数据,最高位不是符号位,只是数据的一部分。
sizeof与strlen的区别 sizeof是操作符,参数可以是数据类型,也可以是变量,在编译时就已经计算出来sizeof的结果,计算的是数据类型占内存的大小; strlen是库函数,参数只能是以‘\0’结尾的字符串,需要在运行时才能计算出来,计算的是字符串的长度; 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环
while(1)
{}
for(;;)
{}
loop: ···
goto loop;
宏定义
写一个标准宏MIN
#define MIN(x,y) ( (x)<=(y)? (x):(y) )
用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
#define SEC_YEAR (365 * 24 * 60 * 60)UL
用宏定义写出swap(x,y),即交换两数
#define swap(x,y) x=x+y;y=x-y;x=x-y;
已知一个数组table ,用一个宏定义,求出数据的
#define LENGIH sizeof(table)/sizeof(table[0])
关键字
关键字static的作用是什么
修饰局部变量时,变量只执行一次,存在于静态存储区,不初始化内容为0,只在当前语句块有效,程序结束后才释放。
修饰全局变量时,变量存在于静态存储区,不初始化内容为0,只在当前文件有效,程序结束后才释放。
修饰函数时,该函数只能在当前文件中使用。
static函数与普通函数的区别与好处 static修饰的函数只能在当前文件使用; 普通函数可以被外部文件用extern调用; 用static修饰函数的好处是: 其他文件可以定义相同名字的函数; 该函数不能被其他文件调用; static修饰变量的作用与好处 修饰局部变量:存在于静态存储区,补初始化内容为0,作用域在当前函数/语句块; 修饰全局变量:存在于静态存储区,不初始化内容为0,作作用域只在当前文件; 用static修饰变量的好处是: 其他文件可以定义相同名字的变量; 该变量不能被其他文件调用; 关键字volatile有什么含意?
并给出三个不用的例子 volatile指的是易变的。
用以告诉编译器被volatile修饰的变量随时可能被改变。
以下场合需要用到volatile修饰: 中断服务程序中修改的供其他程序检测的变量; 多任务环境下共享的标志; 存储器映射的硬件寄存器; 关键字 _interrupt _interrupt是用来定义中断服务子程序ISR的,它有以下几个特点: ISR不能返回一个值; ISR不能传递参数;
