20170425
输出人员信息系统中所有人的id:
1 /*位置指针练习*/
2 #include <stdio.h>
3 int main() {
4 int id = 0;
5 FILE *p_file = fopen("a.bin", "rb");
6 if(p_file) {
7 while(fread(&id, sizeof(int), 1, p_file)) {
8 printf("id是%d\n", id);
9 fseek(p_file, 24, SEEK_CUR);
10 }
11 fclose(p_file);
12 p_file = NULL;
13 }
14
15 return 0;
16 }
预处理指令
#define 这个预处理指令用来定义宏
宏可以用来给数字起名字
1 /*
2 宏演示
3 */
4 #include <stdio.h>
5 int main() {
6 int radius = 0;
7 printf("请输入半径:");
8 scanf("%d", &radius);
9 printf("圆的周长是%g\n", 2 * 3.14f * radius);
10 return 0;
11 }
添加宏
1 /*
2 宏演示
3 */
4 #include <stdio.h>
5 #define PI 3.14f
6 int main() {
7 int radius = 0;
8 printf("请输入半径:");
9 scanf("%d", &radius);
10 printf("圆的周长是%g\n", 2 * PI * radius);
11 return 0;
12 }
编写宏时要把名字写在前面,被代表的内容写在后面
不要在宏定义语句中使用赋值操作符
在gcc命令中可以使用-D选项定义宏,例如给宏指定对应数字
例子:gcc -DSIZE 10 指定了宏SIZE为10
宏也可以用来给一个计算公式起名字
宏可以使用参数表示计算公式中未知的内容,参数的个数没有限制
宏的参数可以代表任何东西,所以宏的参数没有类型
1 /*
2 宏演示
3 */
4 #include <stdio.h>
5 #define PI 3.14f
6 #define CIRCLE(r) 2 * PI * r
7 int main() {
8 int radius = 0;
9 printf("请输入半径:");
10 scanf("%d", &radius);
11 printf("圆的周长是%g\n", CIRCLE(radius));
12 return 0;
13 }
用来给计算公式起名的宏中,不能定义自己的变量
1 #include <stdio.h>
2 #define SUB(x, y) x - y
3 int main() {
4 printf("%d\n", SUB(8, 3)); //8 - 3 = 5
5 printf("%d\n", 20 - SUB(8, 3)); // 20 - 8 - 3 = 9
6 return 0;
7 }
宏没有返回值变量,所以不能保证先完成宏内部的计算。
所有用来代表计算公式的宏都应该在计算公式外面加一对小括号,这样可以保证先完成
宏内部的计算
1 #include <stdio.h>
2 #define SUB(x, y) (x - y)
3 int main() {
4 printf("%d\n", SUB(8, 3)); // 8 - 3 = 5
5 printf("%d\n", 20 - SUB(8, 3)); // 20 - (8 - 3) = 15
6 printf("%d\n", SUB(10, 5 - 2)); // 10 - 5 - 2 = 3
7 return 0;
8 }
宏也没有形式参数,所以不能保证先计算参数的数值
所有代表数字的宏参数都应该用小括号包括起来。
1 #include <stdio.h>
2 #define SUB(x, y) ((x) - (y))
3 int main() {
4 printf("%d\n", SUB(8, 3)); // 5
5 printf("%d\n", 20 - SUB(8, 3)); // 15
6 printf("%d\n", SUB(10, 5 - 2)); // 7
7 return 0;
8 }