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

han*_*csu 5 c arrays macros

我正在编写一本名为" C编程:现代方法"的书,在讨论数组的第一部分中,作者指出:

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

然后使用简短的例子:

#define N 10
...
int a[N];
Run Code Online (Sandbox Code Playgroud)

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

dje*_*lin 5

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

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

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

作为参考,这编译为cc

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


int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)

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