dram.me

命名的重要性

在读Postgres早期代码时,发现C字符串处理上的一个小问题(后续应该已经修复了),在这几行代码中,line[MAX_QUERY_BUFFER-1]被置为0,那么strlen(line)不可能会等于MAX_QUERY_BUFFER

另外line[MAX_QUERY_BUFFER-1]置位本身也是冗余的,因为gets会确保结果字符串以\0结束。

不过这里要说的主要不是以上问题,而是关于gets这个接口的命名。由于很长时间没有编写和阅读大量C代码,在这一次看到gets时,已经想不起这个接口是阅读单行数据的,误以为是阅读指定大小的字符串(fread的功能)。由此想到的就是gets(get-string)的命名,并没有清晰地表达按行读取的意图,不同于getc(get-character),读取单个字符的意思很清晰。