-1

好的,我马上就知道这将是一个愚蠢的问题,但我不明白为什么这个简单的 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

4 回答 4

2

主要原因是你打错字typedeftypdef。但是,您还应该做其他几件事:

  • 添加return 0;到末尾main()
  • 将签名更改mainint main(void)
于 2012-10-13T22:42:43.523 回答
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;
}
于 2012-10-13T22:43:15.310 回答
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-s 之类的typedef struct CELL* CELL_ptr;,因为我发现快速理解什么是指针和什么不是指针非常重要(出于可读性原因)。

其实我更愿意建议

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

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

于 2012-10-13T22:43:37.573 回答
0

在你的 main 函数中添加一个 return

于 2012-10-13T22:40:43.900 回答