【CPL-2023】W14笔记-程序结果、预处理与I/O

有趣的预编译

编写大型程序

头文件:变量的声明,函数的声明,宏的定义,预编译指令

include 库函数 include <xx.h> 找库函数的路径

include 自己的头文件 include "xx.h", 先找当前目录

gcc --verbose main.c
gcc -I. include当前目录

头文件的重复包含

标准头文件结构

#ifndef xx
#define xx
#endif

#pragma once 也能起到类似作用 但不是被所有编译器都支持

头文件中不要定义函数
两个编译单元同时引用的话,会导致重复定义的错误

static
告诉编译器符号不要泄漏到文件外

块外声明的static变量 声明它只是文件内可见 多个编译单元看到的同名的块外静态变量不是同一份

块内声明的static变量 存储期由自动变为静态(存放在静态数据区,而不是每次调用函数的时候在
栈上占空间)
只在程序执行前进行一次初始化
其他块不可见
离开块无限期保留其值


如果在两个文件里面定义了重名的函数 能够分别编译 但链接会出错
修改的方法是,在头文件中定义的函数加上static修饰,这样两个.c文件在链接时也不会出错
两个编译单元内都各自有一个相同名字的函数存在,但在编译单元外都不可见


extern
可以使多个源文件共享一个变量

IO
流重定向
 
./main > a.txt

./main < b.txt

文本文件输入输出函数家族
getchar 字符输入
putchar 字符输出
gets 文本行输入
puts 文本行输出
scanf 格式化输入
printf 格式化输出

二进制文本的模式字符串
fwrite 二进制输出
fread 二进制输入

fseek
posted @ 2024-02-07 23:00  蚂蚁战大象  阅读(60)  评论(0)    收藏  举报