【发布时间】:2011-12-26 16:04:52
【问题描述】:
我需要在两个源文件中包含一些 typedef 定义:
typedef double mat[MATSIZE][MATSIZE] ;
所以我创建了 def.h,其中包括:
#ifndef DEF_H
#define DEF_H
typedef double mat[MATSIZE][MATSIZE] ;
#endif
在两个 .c 文件中,我通过以下方式包含它:
在第一个处理的文件中:
#define MATSIZE 4
#include "def.h"
在第二个 .c 文件中:
extern int MATSIZE;
#include "def.h"
但我明白了
error: variably modified ‘mat’ at file scope
我做错了什么?
【问题讨论】:
-
您还必须定义
MATSIZE。见stackoverflow.com/questions/1712592/… -
我有 '#define MATSIZE 4 #define MATLENGTH MATSIZE*MATSIZE #include "def.h" '在首先处理的这些 .c 文件中,以及 'extern int MATSIZE; #include "def.h" '在第二个
-
一个 .c 文件说 MATSIZE 是一个常数。另一个说它是一个(外部)int。其中一个在撒谎……
-
没有。在 file1 中,它是一个 preprocessor 定义。它指示预处理器在每次发生时用字符串 '4' 替换字符串 'MATSIZE'。 (因此编译器在扫描.h 文件时将有效地看到
typedef double mat[4][4];)。第二个 .c 文件用 name MATSIZE(但未知值)声明了一个(外部)int,因此编译器在扫描 .h 文件时将有效地看到typedef double mat[MATSIZE][MATZIZE];,并认为 MATSIZE 是具有未知值的(外部)int;这是不可接受的。 -
是的,或多或少。您想要的是保证 'mat' 的 typedef 每次被另一个 (.c) 文件包含时都产生完全相同的类型。最简单的方法是将
#define MATSIZE xxx保留在同一个(.h 文件)中。