为什么GCC在尝试返回结构指针时会给出语法错误?

时间:2009-11-25 00:44:39

标签: c gcc syntax struct

我在Ubuntu上使用CodeLite并且因为一些奇怪的原因GCC在我尝试使用返回指向结构的指针的函数编译代码时不断抛出此错误:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token

以下是我为了演示此错误而编写的示例:

#include <stdio.h>

typedef struct test_t {
    unsigned char someVar;
};

test_t* testFunc() { // GCC throws that error on this line
    return NULL;
}

int main(int argc, char **argv)
{
    return 0;
}

因此,除非我忘记一些明显的东西,否则我通常希望这些代码能够在任何其他编译器上编译,即MSVC,所以我完全不知道为什么它不起作用。

希望你们中的一位专家能够赐教。

谢谢!

4 个答案:

答案 0 :(得分:10)

您定义了一个名为struct test_t的类型。稍后在代码中尝试使用类型test_t。你的程序中没有这种类型。您定义的类型再次被称为struct test_t。这就是编译器试图告诉你的内容。

在函数声明中使用正确的类型名称

struct test_t* testFunc() { 
  return NULL;
}

或为test_t第一个

定义简短的“别名”struct test_t
typedef struct test_t test_t;

test_t* testFunc() { 
  return NULL;
}

答案 1 :(得分:4)

您的问题是您缺少typedef的“新名称”。尝试将声明更改为:

typedef struct test_t {
   unsigned char someVar;
} test_t;

答案 2 :(得分:4)

您需要将struct定义更改为:

typedef struct {
    unsigned char someVar;
} test_t;

答案 3 :(得分:0)

您应该像这样定义test_t:

typedef struct {
 unsigned char someVar;
} test_t;