不能将const全局变量用作数组号。结构中的元素

时间:2014-11-02 23:09:23

标签: c arrays struct

我宣布了一个恒定的全局变量' MEM_PRIMES'我想在下面的结构中使用它作为数组元素'数字,但它错误地说"可变地修改'素数'在文件范围。

/* global data */

const unsigned int MEM_PRIMES = 100;

struct{
   char *filename;
   FILE *pfile;
   int nrec;
   unsigned long long primes[MEM_PRIMES];
   size_t index;
}global = {"D:\\C\\C files\\mytext4.bin", NULL, 0, {2ULL, 3ULL, 5ULL}, 3};

3 个答案:

答案 0 :(得分:2)

const并不能确保无法修改存储空间;你可以拿走地址,丢掉const并修改它,所以我相信这就是你得到投诉的原因。

#define MEM_PRIMES 100

会修复它并且是C路。

答案 1 :(得分:0)

你不能在C中做到这一点,就像在C ++中一样。你必须:

#define MEM_PRIMES 100

或类似。

您获得的实际错误消息源于您 允许在C99及更高版本中拥有可变长度数组这一事实 - 您只是不允许在文件范围内拥有它们(或者完全在struct中,因为大小需要在编译时确定。因此,您的编译器实际上并不是想要使用const int而不是实际的常量,而是在想你想要一个VLA,并告诉你在这里不能有一个VLA。

答案 2 :(得分:0)

正如其他人所说,const int变量被认为是C中的变量,不能用于需要编译时常数的上下文中,全局数组的维度或嵌入结构中的数组(也不是case中的switch条款,也不是......)。

虽然#define MEM_PRIMES 100(其他答案建议)可行,但我会使用:

enum { MEM_PRIMES = 100 };

原因详见static const vs #define