从 gcc 到 Visual Studio Express 2010 的 C 代码

标签 c visual-studio-2010 gcc struct

我正在尝试移动我在 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/

相关文章:

C - bool 表达式求值器

c - 如何按行对文本文件进行排序?

c - 为什么我们可以将整数分配给 char 变量

c - 用C中的字符替换字符串

c# - 更新 Entity Framework 模型

c# - 升级到 .NET 4.0 后,Debugger.Launch() 现在使我的 Windows 服务崩溃

asp.net-mvc - MVC 3 要求 System.Web 版本 2.0.0.0 (System.Web.UI.Controls) : Is this a compiler bug?

c - make 编译失败,未定义对 `EVP_DigestUpdate 的引用

c++ - 混合编译器

Python distutils 没有使用正确版本的 gcc