1 . 用预处理指令#define 声明一个常数,用以表明1 年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 关键字static 的作用是什么?(个人认为不是很对,应按全局变量,局部变量和类成员变量和函数来说明它的作用) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 隐藏 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 3. 关键字volatile 有什么含意?并给出三个不同的例子。 一个定义为volatile 的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile 变量的几个例子: 1) 并行设备的硬件寄存器(如:状态寄存器) 2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3) 多线程应用中被几个任务共享的变量 4. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a, 写两段代码,第一个设置a 的 bit 3, 第二个清除a 的 bit 3。在以上两个操作中,要保持其它位不变。 #define BIT3 (0x1 << 3) static int a; void set_bit3(void) { a |= BIT3; } void clear_bit3(void) { a &= ~BIT3; } 5. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中中,要求设置一绝对地址为0x67a9 的整型变量的值为 0xaa66。编译器是一个纯粹的ANSI 编译器。写代码去完成这一任务。 int *ptr; ptr = (int *)0x67a9; *ptr = 0xaa55; 6 . 下面的代码输出是什么,为什么? void foo(void){ unsigned int a = 6; int b = -20; (a+b > 6) ? puts("> 6") : puts("<= 6"); } 答案是输出是 ">6"。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20 变成了一个非常大的正整数,所以该表达式计算出的结果大于6。 7. 下列代码输出什么? int a, b, c, d; a=10; b=a++; c=++a; d=a+++8; printf(“%d,%d,%d \n”,...