[英]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.