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
您可能关注的文档
最近下载
- 平凡的世界读书分享.ppt VIP
- 药物化学习题仉文升主编).pdf VIP
- 2025年山东济南高三一模数学试卷及答案.pdf VIP
- 2025年辽宁省委党校在职研究生招生考试(政治理论)历年参考题库含答案详解.docx VIP
- 保险双录标准话术.pptx
- 2025年辽宁省委党校在职研究生招生考试(法学)历年参考题库含答案详解.docx VIP
- 江苏省南通市2025年中考语文试卷(附答案解析).doc VIP
- 《人工智能在机械设计制造及其自动化中的实践》8900字.docx VIP
- 普传(POWTRAN)变频器PI500变频器使用说明书.pdf
- 最新部编版一年级数学下册教案(全册)表格式二次备课.doc VIP
原创力文档

文档评论(0)