我正在尝试移动我在 Visual Studio Express 2010 下使用 gcc 成功编写和编译的一些代码。
我有以下头文件。
#ifndef _SYMTAB_H_
#define _SYMTAB_H_
#define NHASH 997
typedef enum {NOTYPE, INTTYPE, DOUBLETYPE, STRINGTYPE} SYMBOLTYPE;
typedef union {
int intvalue;
double doublevalue;
char *stringvalue;
} SYMBOLVALUE;
typedef struct {
SYMBOLTYPE type;
char *name;
SYMBOLVALUE value;
} SYMBOL;
void initSymbolTable(void);
SYMBOL *lookup(char *sym);
SYMBOL *addIntSymbol(char *name, int value);
SYMBOL *addDoubleSymbol(char *name, double value);
SYMBOL *addStringSymbol(char *name, char *value);
char *getSymbolName(SYMBOL *sym);
int getIntSymbolValue(SYMBOL *sym);
double getDoubleSymbolValue(SYMBOL *sym);
char *getStringSymbolValue(SYMBOL *sym);
void printSymbolTable(void);
#endif
如果我使用该头文件编写一段代码,例如:
int main(int argc, char *argv[]) {
initSymbolTable();
printSymbolTable();
SYMBOL *intSymbol = addIntSymbol("pippo", 10);
printSymbolTable();
printf("All tests successfull\n");
return 0;
}
我收到以下错误:
error C2275: 'SYMBOL': 非法使用此类型作为表达式
此处描述:http://msdn.microsoft.com/en-us/library/76c9k4ah(v=vs.71).aspx
无论如何,我不明白这有什么问题。 我还在 C/C++->Advanced 下的项目属性中将“编译为”属性设置为“编译为 C 代码”。此外,所有文件都保存为 *.c 和 *.h。
最佳答案
您不能在 Visual Studio 支持的 C 版本中声明变量中间函数。您需要在顶部声明它:
int main(int argc, char *argv[]) {
SYMBOL *intSymbol;
initSymbolTable();
printSymbolTable();
intSymbol = addIntSymbol("pippo", 10);
...
关于从 gcc 到 Visual Studio Express 2010 的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15835922/