背景
用宏定义来替代字符串作为硬编码直接写在代码中是一个良好的习惯。本文简单写一下该方式的好处。希望对才学习C语言的同学一些帮助。
例子
下面的例子是写入文件内容abc
#include "stdio.h"
#include "unistd.h"
#include "string.h" //strlen需要
int main(int argc, char *argv[])
{
FILE *fp = fopen("1.log", "wb");
if (!fp) {
perror("Failed open 1.log");
return -1;
}
if (fwrite(("abc", 1, strlen(("abc"), fp) != strlen(("abc")){
perror("Failed to write 1.log");
fclose(fp);
//unlink("1.log"); //删除文件
return 1;
}
fclose(fp);
}
当我需要修改写入的内容的时候,"abc\n"
比如添加了一个换行符容易造成实际编码后发现写入的内容还是abc,为何?
if (fwrite(("abc\n", 1, strlen(("abc"), fp) != strlen(("abc")){
因为需要修改多处一般编码容易漏掉,只修改了写入的字符串,没有谢盖长度,也没有修改最后预期结果。只修改1 还是写入3字符,修改1 2会造成和预期不一样。
如果用上宏定义,修改后只用修改一处,能够统一。这是C语言设计的时候一种策略带来的效率提高和错误降低。
修改方式:
#include "stdio.h"
#include "unistd.h"
#include "string.h" //strlen需要
int main(int argc, char *argv[])
{
FILE *fp = fopen("1.log", "wb");
if (!fp) {
perror("Failed open 1.log");
return -1;
}
//#define STR "abc"
#define STR "abc\n"
if (fwrite(STR, 1, strlen(STR), fp) != strlen(STR)){
perror("Failed to write 1.log");
fclose(fp);
//unlink("1.log"); //删除文件
return 1;
}
fclose(fp);
}