使用宏定义数组的长度"优秀的实践"?

时间:2014-04-27 18:55:31

标签: c arrays macros

我正在编写一本名为C Programming: A Modern Approach的书,在讨论数组的第一部分中,作者说:

  

使用宏来定义数组的长度是很好的做法

然后使用简短的例子:

#define N 10
...
int a[N];

我知道它与能够返回到程序的源代码并更改值有关,并使其成为宏可能使程序员更容易,但我不确定。 为什么这是一个很好的做法,还是客观的?

2 个答案:

答案 0 :(得分:4)

这是一个很好的做法,因为

  • 数组大小显然必须是硬编码的
  • 但它不应该直接注入源代码中的幻数
  • 因此,一个宏是一个很好的方法,可以给它一个可读的名称并从源中删除它

话虽如此,我不确定我是否同意这是最好的方法。枚举也可以工作并避免宏的一些问题(例如更难以覆盖和静默编译)。而且const int也适用于IIRC。

作为参考,这将与cc编译:

const int s = 1;
int a[s];


int main() {
return 0;
}
  

Apple LLVM 4.2版(clang-425.0.28)(基于LLVM 3.2svn)
  目标:x86_64-apple-darwin12.4.0
  线程模型:posix

答案 1 :(得分:2)

这是一个非常好的做法,C语言规范本身说永远不会将常量隐藏到代码中,而是用有意义的名称来定义它们。有几种方法可以做到,宏(我个人最喜欢,因为他们不使用内存),全局(使用内存,可以修改),常量全局(使用内存,但永远不会改变)。