文件操作、宏

来源:互联网 发布:arm linux gcj 编辑:程序博客网 时间:2024/05/22 06:59
    文件操作中使用一个整数记录下一次读写操作的位置,这个整数就叫位置指针
位置指针记录从文件头到某个位置之间的距离
位置指针的数值会随着文件的读写操作而改变
    ftell   函数可以获得位置指针的数值
rewind  函数可以把位置指针调整到文件开头
fseek   函数可以把位置指针调整到文件中任何位置
       SEEK_SET  0   文件开头
            SEEK_CUR  1   当前位置
            SEEK_END  2   文件尾
    #define 是一个预处理指令,它用于实现宏定义
宏可以用来给数字起名字
宏定义语句不应该以分号结束,语句中不应该出现赋值操作符
宏定义语句中宏名称写在前面
宏名称中不应该有空格
宏在预处理阶段被直接替换成它所代表的内容
    可以在 gcc 命令行中使用 -D 选项定义宏
宏也可以用来给一个计算公式起名字
#define  CIRCLE(r)   2*PI*r 
    用宏的参数表示计算公式中那写未知的数字
宏的参数没有数据类型
代表计算公式的宏是采用两次替换的方式进行处理的
宏的参数可以代表数字以外的其他内容
    宏没有自己独立的变量
宏没有类似返回值的变量,所以不能保证一定先完成宏内部的计算

为了避免这种问题应该在宏的计算公式外边使用小括号,强制先计算宏内部的内容
    宏也没有类似形参的变量所以不能保证先把参数计算完再进行宏内部的计算
宏的每个代表数字的外边都使用小括号强制先计算
不要把自增自减的计算结果作为宏的参数使用,因为这个参数可能在宏内部多次使用
    宏操作符可以在宏内部完成特殊功能
宏操作符包括 # 和 ## 
#     操作符可以在一个参数的外面加上一对 "" 形成一个字符串字面值
##    操作符可以把一个代表标识符的参数和其他内容合并得到一个新的标识符
    
条件编译指 gcc 在进行编译工作时只编译文件中部分语句而忽略另外的语句
    #ifdef/#ifndef  宏名称
....
#else
....
#endif


以上语句结构可以根据一个宏是否被定义过而从两组语句中选择一组编译
    另外一种可以实现条件编译的语句结构如下


#if    逻辑表达式 1
    .....
    #else if  逻辑表达式 2   (可有多个)
    .....
#else  
    .....
    #endif


以上结构可以根据任何逻辑表达式从多个语句中选择一组编译

在多文件程序编写时一个函数必须完整的属于某个文件,一个文件可以包含多个函数
    主函数单独放在一个文件中,其它函数分散在多个文件里
    多文件编译时可以把多有 .c 文件名都列在 gcc 命令后
    
多文件编写过程
1.编写多个 .c 源文件
2.为每个 .c 源文件编写对应的 .h 头文件
3.每个 .h 头文件中编写对应 .c 源文件中的所有函数声明(主函数除外)
4.为每个 .c 源文件包含必要的 .h 头文件(配对的头文件以及使用的函数所声明的文件)



所有头文件都应该使用预处理指令进行条件编译处理,防止多次编译的发生
 
某个 .c 文件如果希望使用另外的 .c 文件中声明的全局变量则需要使用 extern 关键字再次声明一遍这个变量
    使用 extern 关键字声明变量的语句通常写在头文件中

    
   
   1.结构体
   2.数据对齐和补齐
   3.枚举
   4.联合

练习
   1.改造人员信息管理系统程序,保证不同人员的 ID 不同
   2.编写宏完成字母字符的大小写转换
   3.使用多文件方法生成彩票的程序,彩票中的所有数据记录在一个全局数组中
0 0
原创粉丝点击