大家好,我是阿叔,专注分享产品、研发、管理等相关经验。
一共有125个改善C语言程序的建议,因为篇幅的原因,本文将第62到89个建议。其他的建议再下几篇文章发布。
7. 结构、位域和枚举
建议62:结构体的设计要遵循简单、单一原则
建议62-1:尽量使结构体的功能单一
建议62-2:尽量减小结构体间关系的复杂度
建议62-3:尽量使结构体中元素的个数适中
建议62-4:合理划分与改进结构体以提高空间效率
建议63:合理利用结构体内存对齐原理来提高程序效率
建议64:结构体的长度不一定等于各个成员的长度之和
建议65:避免在结构体之间执行逐字节比较
建议66:谨慎使用位域
建议67:谨慎使用枚举
建议68:禁止在位域成员上调用offsetof宏
建议69:深入理解结构体数组和结构体指针
8. 字符与字符串
建议70:不要忽视字符串的null('\0')结尾符
建议70-1:正确认识字符数组和字符串
建议70-2:字符数组必须能够同时容纳字符数据和null结尾符
建议70-3:谨慎字符数组的初始化
建议71:尽量使用const指针来引用字符串常量
建议72:区别strlen函数与sizeof运算符
建议73:在使用不受限制的字符串函数时,必须保证结果字符串不会溢出内存
建议73-1:避免字符串拷贝发生溢出
建议73-2:区别串拷贝strcpy与内存拷贝memcpy
建议73-3:避免strcpy与memcpy函数内存重叠
建议73-4:区别字符串比较与内存比较
建议73-5:避免strcat函数发生内存重叠与溢出
建议74:谨慎strtok函数的不可重入性
建议75:掌握字符串查找技术
建议75-1:使用strchr与strrchr函数查找单个字符
建议75-2:使用strpbrk函数查找多个字符
建议75-3:使用strstr函数查找一个子串
建议75-4:区别strspn与strcspn函数
9. 文件系统
建议76:谨慎使用printf和scanf函数
建议77:谨慎文件打开操作
建议77-1:正确指定fopen的mode参数
建议77-2:必须检查fopen函数的返回值
建议77-3:尽量避免重复打开已经被打开的文件
建议77-4:区别fopen与fopen_s函数
建议77-5:区别fopen与freopen函数
建议78:文件操作完成后必须关闭
建议79:正确理解EOF宏
建议80:尽量使用feof和ferror检测文件结束和错误
建议81:尽量使用fgets替换gets函数
建议82:尽量使用fputs替换puts函数
建议83:合理选择单个字符读写函数
建议84:区别格式化读写函数
建议84-1:区别printf/scanf、fprintf/fscanf和sprintf/sscanf
建议84-2:尽量使用snprintf替代sprintf函数
建议84-3:区别vprintf/vscanf、vfprintf/vfscanf、vsprintf/vsscanf和vsnprintf
建议85:尽量使用fread与fwrite函数来读写二进制文件
建议86:尽量使用fseek替换rewind函数
建议87:尽量使用setvbuf替换setbuf函数
建议88:谨慎remove函数删除已打开的文件
建议89:谨慎rename函数重命名已经存在的文件