main()函数后在C中定义结构

问题描述 投票:1回答:2

我已经学到了很多Java语言,现在我想学习C语言,我学到了一些有关struct和typedef的知识,但是当我将typedef放在main()函数之后并且在main()功能。

是否有一种方法可以声明类型但不能在C中定义它们,因此我可以在main()函数之后保留与函数相似的代码? (我不确定这是否是个好习惯,但我喜欢这样组织代码)

c struct typedef
2个回答
2
投票

不要那样做。 C代码旨在供编译器读取,并且它将在不断读取文件的同时学习新的定义。将东西移到main()以下没有任何作用。它还会混淆其他人。

关于问题本身:在某些情况下,可以。如果您需要的只是前向声明,则可以这样做。但是在大多数情况下,您需要定义,因此它对您没有帮助。

例如,它将编译:

struct T;

int main(void)
{
    struct T * p = 0;
    return !!p;
}

// Later on you may define `struct T`

0
投票

C需要在使用类型之前对其进行声明。如果代码仅使用指向该类型的指针,则该代码不需要声明成员,这是一个前向声明。其他用法,例如按值传递类型或将其用作局部变量,则需要完整的定义。

C项目通常使用标题,这些标题将提供类型的定义。这些都包含在C模块中。

// header.h
#ifndef _header_h_
#define _header_h_

struct DescribedType {
    int member;
    char* variables;
};
#endif

// module.c
#include "header.h"

struct ForwardDeclaration;
ForwardDeclaration* allocForward();

int main(){
    DescribedType someType;
    ForwardDeclaration* someValue = allocForward();
    return 0;
}

struct ForwardDeclaration {
    int declaredLater;
};
© www.soinside.com 2019 - 2024. All rights reserved.