1. 用预处理指令 #define 声明一个常数,用以表明 1年中有多少秒(忽略闰年问题)
#define SECONDS_YEAR
(365*24*60*60UL)
int main()
{
printf("the answer is: %lu\n",SECONDS_YEAR);
注意在gcc中 long unsiged int 输出为%lu
2. 写一个 “标准 ”宏MIN ,这个宏输入两个参数并返回较小的一个。
#define MIN(A,B) ((A)>(B)?(B):(A))
int main()
{
printf("the answer is: %d\n",MIN(3,4));
这里的A,B只能输入整数
3.用变量 a给出下面的定义
一个指向指针的的指针,它指向的指针是指向一个整型数 int **a
一个有 10个指针的数组,该指针是指向一个整型数的 int
*a[10]
一个指向有 10个整型数数组的指针 int (*a)[10]
一个指向函数的指针,该函数有一个整型参数并返回一个整型数 int (*a)(int)
一个有 10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int (*a[10])(int)
4.关键字 static的作用是什么?
a.描述静态变量,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
b.描述全局变量,一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。
一个被声明为静态的函数只可被这一模块内的其它函数调用。
那就是, 这个函数被限制在声 明它的模块的本地范围内使用。
5.下面的函数有什么错误:
int square(volatile int *ptr)
{
return *ptr * *ptr;
}
一个定义为 volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值
了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存 在寄存器里的备份。
Ptr内容可能被修改,无法保证两次取得同一个值,应该先取出值放入一个变量中,然后通过这个变量来计算
6.嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址 为0x67a9的整型变量的值为
0xaa66。编译器是一个纯粹的 ANSI 编译器。写代码去完成这一任务。
int *p;
P=(int*)0x67a9;
*p=0xaa66;
7.中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字
__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。
__interrupt
double compute_area (double radius)
{ double area =
PI * radius * radius;
printf(” Area =
%f”, area);
return
area;
}
这个函数有太多的错误了,以至让人不知从何说起了:
1). ISR
不能返回一个值。如果你不懂这个,那么你不会被雇用