C程序设计16-编译预处理全解.ppt

C程序设计16-编译预处理全解

* * 例: /* #define STUDENT */ int main() { #ifdef STUDENT printf(“I am a student\n”); #else printf(“I am a teacher\n”); #endif return 0; } * * 格式2: #ifndef 标识符 程序段1 #else 程序段2 #endif 作用:与格式1相反 * * 格式3: #if 表达式 程序段1 #else 程序段2 #endif 作用: 若表达式为真, 程序段1参与编译, 否则, 程序段2参与编译 * * 条件编译和分支结构的比较: 条件编译:在编译前就根据条件决定哪些程序段参与编译(只有一部分源程序参与编译),产生的代码少 分支结构:不管条件满足与否, 两部分源程序都参与编译,产生的代码长; 执行时根据条件决定执行那一部分代码 问题:为什么分支结构两部分都参与编译? * * 条件编译举例: 设有三个源文件,其中存在着对同一个源文件重复包含的问题。请修改程序,不要删除代码,利用条件编译避免重复包含,使得每个源文件都能通过编译。 //a.c #include “b.c” #include “c.c” int main() { sub1(); sub2(); return 0; } //b.c #include “c.c” void sub1() { …… } void sub3() { sub2(); } //c.c void sub2() { …… } * * 条件编译举例: 答案: //a.c #include “b.c” #include “c.c” int main() { sub1(); sub2(); return 0; } //b.c #include “c.c” void sub1() { …… } void sub3() { sub2(); } //c.c #ifndef FILE_C #define FILE_C void sub2() { …… } #endif * * 习 题 1. 下面程序的输出结果是: #define MIN(x,y) (x)(y)?(x):(y) int main() { int i,j,k; i=10; j=15; k=10*MIN(i,j); printf(“%d\n”,k); return 0; } A) 15 B)100 C)10 D)150 A * * 2. 下面程序for循环的执行次数是: #define N 2 #define M N+1 #define NUM (M+1)*M/2 int main() { int i; for(i=1; i=NUM; i++) printf(“%d\n”,i); return 0; } A) 5 B) 6 C) 8 D) 9 C * * 3. 下面程序的输出结果是: #include “stdio.h” #define FUDGF(y) 2.84+y #define PR(a) printf(“%d”,(int)(a)) #define PRINT(a) PR(a); putchar(‘\n’) int main() { int x=2; PRINT(FUDGF(5)*x); return 0; } A) 11 B) 12 C) 13 D) 15 B * * 4. 下面叙述正确的是: A) 用#include包含的头文件的后缀不能是“.a” B) 一些源程序中包含某个头文件,当该头文件有错时,只需对该头文件进行修改,包含此头文件的源程序不必重新编译。 C) 宏命令行可以看作是一行C语句 D) C编译中的预处理是在编译之前进行的 D * * 5. 设有如下两个文件: //文件file1.c #define N 3 #include “file2.c” int main() { #ifdef T printf(“%d\n”,S(2+N)); #else printf(“e

文档评论(0)

1亿VIP精品文档

相关文档