在我的项目中,一个 structre 用于多个功能。
像这样:
void function1 (Struct_type1 * pstType1);
但是当我搜索Struct_type1
的参考资料时,我找不到任何参考资料。这个结构必须在某个地方定义。如何找到定义?
操作系统-Windows
编辑:我认为没有源代码很难回答这个问题,我不能在这里分享那个大项目。所以,我把我的问题改成:
- 在嵌入式项目中是否可以隐藏声明?
(隐藏的意思是没有人可以看到定义。)
在我的项目中,一个 structre 用于多个功能。
像这样:
void function1 (Struct_type1 * pstType1);
但是当我搜索Struct_type1
的参考资料时,我找不到任何参考资料。这个结构必须在某个地方定义。如何找到定义?
操作系统-Windows
编辑:我认为没有源代码很难回答这个问题,我不能在这里分享那个大项目。所以,我把我的问题改成:
(隐藏的意思是没有人可以看到定义。)
在嵌入式项目中是否可以隐藏声明?
如果您可以访问项目中的所有源代码,那么没有。
这仅在一种特定情况下才有可能,即当您有一个没有 C 代码的外部库时,您只有一个头文件和一个目标文件或 lib 文件(或 DLL 等)。
对于这种情况,库标头可以(也是良好的做法)在标头中前向声明一个不完整的类型,并将实际实现隐藏在您无权访问的 C 文件中。
然后你会在 h 文件中有这样的东西:
typedef struct Struct_type1 Struct_type1;
如果他们想隐藏实现,编译器也可能经常用它自己的库来做这样的事情。一个这样的例子是FILE
结构。
不是答案,但可能是找到答案的方法。理念:让编译器帮助你。
自己定义结构,然后查看编译器错误,例如“struct struct_type1 is already defined in... at line ...”
如果在这种情况下没有出现编译器错误,则结构可能只是前向声明,但未定义。
为了解释为什么有时会这样做,这里有一些代码:
// Something.h
struct struct_type1; // Forward declaration.
struct struct_type1 *SomethingInit();
void SomethingDo( struct struct_type1 * context );
在类似上面的代码中,结构的定义隐藏在实现中。在外部,不需要知道结构是如何定义的或其大小等,因为它仅作为指向结构的指针进行交易(而不是作为值)。这种技术用于将内部类型排除在公共头文件之外,并且经常被库设计者使用。您可以将其视为某种不透明的句柄。
但是,您仍然应该能够找到前向声明,尽管不是定义。