字符数组的问题,求大佬解答

#include
#include

int main()
{
const int size =29;
int i;
int ret=-1;
char str[7][size]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
char str1[size];
gets(str1);

为什么用const定义他会warning,9    2   C:\Users\dell\Documents\未命名2.c    [Error] variable-sized object may not be initialized字符串的数组定义没用常量,而用define定义就能编译呢?

c语言中,虽然const数据类型的值无法改变,但不能用来定义数组大小。原因我感觉是这样的:假设const变量是个定义在另一个文件A的全局变量,则文件B要使用该变量仅需引用,文件B在编译时并不会知道该const变量的具体值;而在编译文件B时,各段空间的大小需要确定下来了,用const变量方式的数组大小不知道,自然无法编译。编译器干脆将这种方式定义的数组全部报错,以保持语法的一致性。而define方式,在预编译阶段会把define的值修改到使用的地方,编译时自然没有问题

const可以当做用来定义常量,但是你把常量定义写在了函数内部是不行的噢。