繁体   English   中英

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

[英]Defining structs in C after main() function

我已经学习了相当多的 java,现在我想学习 C,我了解了一些关于结构和类型定义的知识,但是当我将类型定义放在 main() 函数之后并在main() main()函数中使用它时,我遇到了错误main()功能。

有没有一种方法可以声明类型但不在 C 中定义它们,这样我就可以像函数一样在main()函数之后保留我的代码? (我不确定这是否是好的做法,但我喜欢以这种方式组织我的代码)

不要那样做。 C 代码旨在由编译器读取,并且它将在不断读取文件时了解新定义。 将内容移动到main()下面没有任何意义。 它还会混淆其他人。

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

例如,这将编译:

struct T;

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

// Later on you may define `struct T`

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;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM