2013-04-05 71 views
1

我试图在Visual Studio Express的2010C代码从GCC到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; 
} 

我得到的跟随着错误:

错误C2275:“符号”:非法使用这种类型的作为表达

是descrideb这里:http://msdn.microsoft.com/en-us/library/76c9k4ah(v=vs.71).aspx

无论如何,我不明白这有什么问题。 我还在C/C++ - > Advanced下的prject属性中将“编译为”属性设置为“编译为C代码”。而且所有文件都保存为* .c和* .h。

+1

MSVC++不是C编译器,因为它没有实现C99标准;它无法编译使用C99标准(1999年批准;十年前)批准的功能的有效C代码。解决方案:不要使用C++编译器来编译C代码。 – Sebivor 2013-04-05 14:20:05

回答

3

您无法在Visual Studio支持的C版本中声明变量中间函数。你需要做的顶部声明它:或者

int main(int argc, char *argv[]) { 
    SYMBOL *intSymbol; 

    initSymbolTable(); 

    printSymbolTable(); 

    intSymbol = addIntSymbol("pippo", 10); 
    ... 
+0

它在C99中是合法的,但MS只支持不允许的C89。 – hmjd 2013-04-05 14:04:21

1

,您可以用鼠标右键单击该投在解决方案资源管理器中的错误.c文件,转到C/C++ - >高级,并设置编译至于编译为C++代码。这样你就不需要编辑你的源代码。

+1

你不需要将C编译为C++,并期望它可以工作。 – RichieHindle 2013-04-05 14:11:45

+0

这是正确的,它只是抱怨strdup,因为它已被弃用......无论如何,我需要纯粹的C代码。不管怎么说,还是要谢谢你。 – salvo 2013-04-05 14:12:27

+0

@salvo:不确定'纯C代码'是什么意思。你的代码将保持纯C.如果你的意思是生成的二进制代码,那么不应该有任何的财务差异,你只是为Windows编译。 – 2013-04-05 14:22:32

相关问题