我宣布了一个恒定的全局变量' 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};
答案 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 };