SKD*_*SKD 0 c embedded source-insight
在我的项目中,一个structre正在几个函数中使用.
像这样:
void function1 (Struct_type1 * pstType1);
Run Code Online (Sandbox Code Playgroud)
但是当我搜索Struct_type1引用时,我找不到任何引用.必须在某处定义此结构.如何找到定义?
OS-Windows
编辑:我认为没有源代码很难回答这个问题,我不能在这里分享这个大项目.所以,我把我的问题改为:
(通过隐藏我的意思是没有人能看到定义.)
嵌入式项目中是否可以隐藏声明?
如果您可以访问项目中的所有源代码,那么没有.
这只能在一个特定的情况下实现,也就是说,当你有一个没有C代码的外部库时,你只有一个头文件和一个目标文件或lib文件(或DLL等).
对于这种情况,库标题可以(并且良好实践)在标头中转发声明一个不完整的类型,并隐藏您无权访问的C文件中的实际实现.
然后你会在h文件中有这样的东西:
typedef struct Struct_type1 Struct_type1;
Run Code Online (Sandbox Code Playgroud)
如果他们想要隐藏实现,编译器可能经常使用自己的库来执行此类操作.一个这样的例子是FILE结构.
不是答案,但可能是找到答案的方法.想法:让编译器帮助你.
自己定义结构,然后查看编译器错误,例如"struct struct_type1已在...中定义......"
如果在这种情况下没有编译器错误,可能结构只是前向声明,但未定义.
为了解释为什么有时这样做,这里有一些代码:
// Something.h
struct struct_type1; // Forward declaration.
struct struct_type1 *SomethingInit();
void SomethingDo( struct struct_type1 * context );
Run Code Online (Sandbox Code Playgroud)
在如上所示的代码中,结构的定义隐藏在实现中.在外部,它不需要知道,如何定义结构或其大小等,因为它只作为指向结构的指针(并且从不作为值)交易.此技术用于将内部类型保留在公共头文件之外,并且经常由库设计者使用.你可以把它想象成一种不透明的手柄.
但是,你仍然应该能够找到前方声明,尽管不是定义.