const int size = 10; // realna ilość danych
int tablica[size+1];
我有:
在任何函数之外声明的可变大小类型
答案 0 :(得分:4)
使用
#define size 10
而不是const int
。后者不是C中的编译时常量,而是一个无法赋值的变量(除非通过指针和强制转换来摆脱const
)。
(这是C和C ++之间的区别。)
答案 1 :(得分:3)
你可以使用枚举。
enum
{
size = 10
};
int table[size + 1];
答案 2 :(得分:3)
使用:
enum { size = 10 };
这是一个常量值,可用于声明和标签等情况。在C99中,在函数内部,原始代码不会成为问题 - 您的数组tablica
将是VLA或可变长度数组(并且编译器错误消息试图说“您不能拥有VLA外的一个功能“)。
在代码上使用调试器时,使用枚举可以提供更好的可跟踪性;符号包含在符号表中。通常,调试器无法使用C预处理器符号,因此在#define'd时尝试打印'size'不会打印答案;当它是枚举时打印“大小”。
答案 3 :(得分:1)
错误是相当不言自明的。您不能在函数外声明可变长度数组。虽然您正在创建的数组的大小实际上是在编译时修复的,但您在技术上仍然违反了该语言的约束。
通常的选择是:
将数组移动到一个函数中。 (通常是最好的选择,记住在可能的情况下应避免使用全局变量。)
#define size n
其中n
是您想要的大小,而不是使用int。 (通常比“神奇的数字”更好,而且在传统的C中也很标准。)
使用“幻数”(int tablica[11];
)。 (通常是最后的选择,但有时它确实更有意义。)