C:语法错误:标识符'阻止'

时间:2016-04-25 16:26:55

标签: c syntax

我遇到了我创建的结构的问题

typedef struct _BLOCK
{
    int size;
    int offset;
    Block *nextBlock;

} Block;

编译器不识别* nextBlock指针的标识符

编译器似乎也没有认识到" Block"结构在程序的任何一点,我用它作为几个方法的参数和错误,如"语法错误:缺少' {'之前' *'"发生。任何见解都会有所帮助

2 个答案:

答案 0 :(得分:1)

你错过了一个分号:

struct _BLOCK *nextBlock;

答案 1 :(得分:1)

丢失的分号并没有帮助,但是你有一个更大的问题。

在结构定义完成之后,引入了typedef名称Block,因此您无法在nextBlock的声明中使用它。此时您有两个选择:

  1. 使用struct _BLOCK作为声明:
    struct _BLOCK *nextBlock;
  2. 转发声明struct和typedef名称:
    struct _BLOCK;
    typdef struct _BLOCK Block;
    struct _BLOCK {
      ...
      Block *nextBlock;
      ...
    };
    

尼特:

不要为您的变量或类型名称使用前导下划线;这些名称是为实施保留的。 IOW,编译器可能出于自己的目的定义符号_BLOCK,使用_BLOCK可能会导致名称空间冲突。请改用struct BLOCKstruct Block之类的东西。

另外,在使用typedef时要明智。如果使用Block的任何人必须知道它是struct类型,那么您最好只使用struct Block。以FILE类型为例;你不是要直接操纵FILE对象的内容,只需将指针传递给各种stdio例程即可。作为程序员,您不需要知道内部的FILE对象是什么样的,所以在这种情况下,将它隐藏在typedef后面是合适的。

如果使用您的Block类型的任何人必须直接访问sizeoffsetnextBlock成员 ,那么它就是'更好地使其struct - 明确。 OTOH,如果您提供API来操作或访问块成员(类似于FILE类型和stdio例程),那么typedef是可以的。

从不隐藏typedef背后的指针。