简单的程序不会在C中编译

时间:2012-10-13 22:38:58

标签: c gcc compiler-construction

好的,我知道这是一个愚蠢的问题,但我不明白为什么这个简单的C程序没有编译。

#include <stdio.h>
#include <stdlib.h>
typdef struct CELL *LIST;
struct CELL {
    int element;
    LIST next;
};
main() {
    struct CELL *value;
    printf("Hello, World!");
}

我是C编程的新手,不是一般的编程,而是C语言。我熟悉Objective-C,Java,Matlab和其他一些编程,但由于某些原因,我无法理解这一点。我试图在OS X中使用GCC编译它,如果这有所不同。谢谢你的帮助!

我收到的错误消息是

functionTest.c:5: error: expected specifier-qualifier-list before ‘LIST’
functionTest.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘struct’

4 个答案:

答案 0 :(得分:2)

主要原因是您将typedef拼写为typdef。但是,您还应该做其他一些事情:

  • return 0;添加到main()
  • 的末尾
  • main的签名更改为int main(void)

答案 1 :(得分:2)

最重要的是:你有拼写错误的typedef。

然后,至少这几天,我们通常会向main添加一个返回类型,如下所示:

int main()

此外,main应该返回退出状态,所以:

#include <stdio.h>
#include <stdlib.h>

typedef struct CELL *LIST;

struct CELL {
  int element;
  LIST next;
};

int main() {
  struct CELL *value;
  printf("Hello, World!\n");
  return 0;
}

答案 2 :(得分:2)

您是否尝试使用gcc -Wall -g yourprog.c -o yourbinary进行编译?

我得到了:

yourprog.c:3:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'struct'
yourprog.c:6:5: error: unknown type name 'LIST'
yourprog.c:8:1: warning: return type defaults to 'int' [-Wreturn-type]
yourprog.c: In function 'main':
yourprog.c:9:18: warning: unused variable 'value' [-Wunused-variable]
yourprog.c:11:1: warning: control reaches end of non-void function [-Wreturn-type]

并且您错误地typedef,您应该更改main的签名并在其中添加return 0;

顺便说一下,我觉得你的typedef味道很差。我建议代码(像Gtk那样)typedef struct CELL CELL_t之类的内容并声明CELL_t* value = NULL.因为你真的想要记住value是指向CELL_t的指针。特别是,我讨厌类似typedef struct CELL* CELL_ptr;的typedef-s,因为我发现非常重要(出于可读性原因)快速理解什么是指针而什么不是指针。

其实我宁愿建议

 struct cell_st;
 typedef struct cell_st cell_t;
 cell_t *value = NULL;

(我喜欢将所有指针初始化为NULL)。

答案 3 :(得分:0)

在主要功能中添加一个回报