从gcc到Visual Studio Express 2010的C代码
我正在尝试将我用gcc在VisualStudioExpress 2010下成功编写和编译的一些代码转移到其他地方 我有下面的头文件从gcc到Visual Studio Express 2010的C代码,c,visual-studio-2010,gcc,struct,C,Visual Studio 2010,Gcc,Struct,我正在尝试将我用gcc在VisualStudioExpress 2010下成功编写和编译的一些代码转移到其他地方 我有下面的头文件 #ifndef _SYMTAB_H_ #define _SYMTAB_H_ #define NHASH 997 typedef enum {NOTYPE, INTTYPE, DOUBLETYPE, STRINGTYPE} SYMBOLTYPE; typedef union { int intvalue; double doublevalue;
#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:“符号”:非法使用此类型作为表达式
这里描述的是:
不管怎样,我不明白这有什么不对。
我还将C/C++->Advanced下的项目属性中的“编译为”属性设置为“编译为C代码”。此外,所有文件都保存为*.c和*.h。您不能在Visual Studio支持的c版本中声明变量mid函数。您需要在顶部声明它:
int main(int argc, char *argv[]) {
SYMBOL *intSymbol;
initSymbolTable();
printSymbolTable();
intSymbol = addIntSymbol("pippo", 10);
...
不能在Visual Studio支持的C版本中声明变量mid函数。您需要在顶部声明它:
int main(int argc, char *argv[]) {
SYMBOL *intSymbol;
initSymbolTable();
printSymbolTable();
intSymbol = addIntSymbol("pippo", 10);
...
可选地,您可以右键单击在解决方案资源管理器中引发错误的.c文件,转到C/C++ + >高级,并将编译设置为C++代码编译。这样你就不需要编辑你的源代码了。< /P> < P>,你可以右键点击在解决方案资源管理器中抛出错误的.c文件,转到C/C++ +高级,然后编译编译为C++代码。这样你就不需要编辑你的源代码了。
它在C99中是合法的,但MS只支持C89,这是不允许的。它在C99中是合法的,但MS只支持C89,这是不允许的。这是正确的,它只抱怨strdup,因为它被弃用了……无论如何,我需要纯C代码。谢谢。@salvo:不知道你说的纯C代码是什么意思。您的代码将保持纯C。如果您是生成的二进制代码,则不应该有任何实质上的差异,而您只不过是编写Windows的。@ RieieHeeld:您能给我一个有效C代码的例子吗?如果它被解释为C++,那么它会有不同的行为,还是无效?我肯定有这样的例子,但想不出任何例子。X*X=malloc(sizeof(X))代码>是有效的C,因为您可以从 Value*>代码>隐式地转换为 X*< /Cl>,但是它需要一个明确的C++类型,我必须将这个代码与Flex和ByEN生成的代码合并。我用Flex和BySe生成C代码,因为我知道它是“更稳定”的代码,然后是C++。因此,我使用cygwin使用flex和Bison生成代码,然后在VisualStudio2010中集成生成的代码。如果我使用VisualStudioC++编译器,我会有很多错误。这是正确的,它只会抱怨STRUP,因为它被弃用了……无论如何,我需要纯C代码。谢谢。@salvo:不知道你说的纯C代码是什么意思。您的代码将保持纯C。如果您是生成的二进制代码,则不应该有任何实质上的差异,而您只不过是编写Windows的。@ RieieHeeld:您能给我一个有效C代码的例子吗?如果它被解释为C++,那么它会有不同的行为,还是无效?我肯定有这样的例子,但想不出任何例子。X*X=malloc(sizeof(X))代码>是有效的C,因为您可以从 Value*>代码>隐式地转换为 X*< /Cl>,但是它需要一个明确的C++类型,我必须将这个代码与Flex和ByEN生成的代码合并。我用Flex和BySe生成C代码,因为我知道它是“更稳定”的代码,然后是C++。因此,我使用cygwin使用flex和Bison生成代码,然后在VisualStudio2010中集成生成的代码。如果我使用VisualStudioC++编译器,我会有很多错误。MSVC++不是C编译器,因为它没有实现C99标准;它无法编译使用C99标准(于1999年批准;十多年前批准)添加的功能的有效C代码。解决方案:不要使用C++编译器编译C代码。MSVC ++不是C编译器,因为它没有实现C99标准;它无法编译使用C99标准(于1999年批准;十多年前批准)添加的功能的有效C代码。解决方案:不要使用C++编译器编译C代码。