我已经学到了很多Java语言,现在我想学习C语言,我学到了一些有关struct和typedef的知识,但是当我将typedef放在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;
};