- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要将只读 .h 文件的某些部分(如第 10 行到第 15 行)用于 .C 文件。
注意:我无法编辑 .h 文件,因为它不是来 self 的模块。我也不能使用所有的 .h 文件变量。
有没有办法这样使用?
最佳答案
作为包含客户端代码,您无法任意控制使用包含 header 中的哪些行。
一些 header 通过使用 #if
明确授予控制权#ifdef
或 #ifndef
这样您就可以在包含该 header 之前设置一些预处理器定义并影响使用哪些行。
否则,您有时可以自己声明访问所需的变量,但我强烈反对这样做:随着 header 的发展,很容易导致您的声明与 header 不同。这在 C++ 中尤其糟糕,头文件的作者可能会合理地期望说更改 class X
进入template <...> class XT ...; typedef XT<...> X;
不会破坏客户端干净地重新编译的能力,但如果您在自己的代码中声明了“class X;
”,这将与它作为模板发生冲突。
您在评论中更具体地说明了您的需求:
I have to use only few variables from different modules( .h files). If i use #include for all .h files, then "redundant redeclaration of 'Tabc_st', previous declaration of 'Ta[b]c_st' was here" warning will come..... – laki
我猜测正在使用某种“匈牙利语”符号,并且 - 从恶心中恢复过来后 - 假设 T
用于类型和 _st
对于 struct
.如果是这样,您要么有多个 struct Tabc_st
声明或 typedef ... Tabc_st;
秒。要评论其他答案中列出的选项:
#include
不同命名空间中的冲突 header :这是解决问题的一种适度干净的结构化方法,但可能会适得其反:例如 - 如果 header 公开了您计划为其链接库的功能,那么损坏的名称将不匹配和链接会失败。
#define
Tabc_st WhateverElse 围绕除一个有问题的 header 之外的所有 header :这对 typedef 非常有用,但对于 struct Tabc_st
它确实意味着在 header 中稍后对该类型的任何使用都会看到“WhateverElse”——如果你打算能够使用 Tabc_st 并将它与任何 header 中的任何代码一起使用,你会发现这并没有成功,因为他们现在都期待不同的类型。
另一种方法是提供一个 .h/.cpp 对,将每个有问题的 .h 包装起来,并使用新的无冲突名称公开其功能。维护工作量很大。
一个可行的 hack 可能是编写预编译步骤的脚本,例如:
TABC_ST=`fgrep 'struct Tabc_st;' header1.h`
fgrep -v --line-regexp $TABC_ST header2.h > header2_sans_tabc.h
fgrep -v --line-regexp $TABC_ST header3.h > header3_sans_tabc.h
然后使用 ..._sans_tabc.h
标题....
关于c++ - 如何在我的 .c 文件中只包含几行头文件(只读文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16454604/
我是一名优秀的程序员,十分优秀!