+ -
当前位置:首页 → 问答吧 → C语言里有没有类似C++前向声明的东西?

C语言里有没有类似C++前向声明的东西?

时间:2011-11-28

来源:互联网

如题,看下面一段C程序,我在想要是有前向声明就好了。。。
C/C++ code

//// minGW编译器 codeblocks10.05
//// main.c

//// 依赖 block2
typedef struct _block
{
    int x;
    int y;
    block2* b2;
}block;

//// 依赖block
typedef int(*func1)(block*);

////  依赖func1
typedef struct _block2
{
    func1 f1;
}block2;

int main()
{
    //
    return 0;
}


错误是:
C:\....\main..c|7|error: expected specifier-qualifier-list before 'block2'|

作者: dawn110110   发布时间: 2011-11-28

坐等。。。。

作者: dawn110110   发布时间: 2011-11-28

貌似是没有,很少接触C

作者: onlycs   发布时间: 2011-11-28

要是给我逼没招了,我就用void指针好了。。真是纠结的东西。。
引用 2 楼 onlycs 的回复:

貌似是没有,很少接触C

作者: dawn110110   发布时间: 2011-11-28

函数可以前向声明啊,结构应该也可以
试一下:
struct block2;

typedef struct _block
...

作者: ouyh12345   发布时间: 2011-11-28

可以。不过LZ的问题不在于这里。关键是C的typedef name和结构体的tag是两回事,不像C++那样在很多情况下可以省略struct,而一个typedef name没前向声明的用法。
C/C++ code

struct _block2;
typedef struct _block
{
    int x;
    int y;
    struct block2* b2;
}block;

//// 依赖block
typedef int(*func1)(block*);

////  依赖func1
typedef struct _block2
{
    func1 f1;
}block2;


作者: FrankHB1989   发布时间: 2011-11-28

被使用的都需要提前声明吧

作者: fly55rain   发布时间: 2011-11-28

引用 6 楼 fly55rain 的回复:

被使用的都需要提前声明吧

不见得。前向enum声明ISO C和ISO C++03都不支持。

作者: FrankHB1989   发布时间: 2011-11-28

引用 5 楼 frankhb1989 的回复:

可以。不过LZ的问题不在于这里。关键是C的typedef name和结构体的tag是两回事,不像C++那样在很多情况下可以省略struct,而一个typedef name没前向声明的用法。
C/C++ code

struct _block2;
typedef struct _block
{
int x;
int y;
struct block2* b2;
}bloc……


++

作者: qq120848369   发布时间: 2011-11-28

引用 5 楼 frankhb1989 的回复:

可以。不过LZ的问题不在于这里。关键是C的typedef name和结构体的tag是两回事,不像C++那样在很多情况下可以省略struct,而一个typedef name没前向声明的用法。
C/C++ code

struct _block2;
typedef struct _block
{
int x;
int y;
struct block2* b2;
}bloc……
学习了

作者: mayadong7349   发布时间: 2011-11-28