gpt4 book ai didi

c++ - 如何在我的 .c 文件中只包含几行头文件(只读文件)

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:00 25 4
gpt4 key购买 nike

我需要将只读 .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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com