gpt4 book ai didi

objective-c - 我可以创建只对我的类可见的 C 函数,它被分成多个文件吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:04:04 25 4
gpt4 key购买 nike

使用静态函数,我可以限制我的函数与手头文件的链接,这在很多情况下都是完美的。但是我有一个类作为一个文件很笨重,但将其分解更令人沮丧,因为有些功能我想保持“私有(private)”但在整个过程中都需要。

最佳答案

答案的一部分必须是反问题,例如:

  • 为什么你的类(class)这么大,必须分开?
  • 你确定你的类(class)太大以至于必须分开吗? (“大”有多大?)
  • 你确定你的类正确抽象了吗?
  • 您能否将常用函数放入一个新类中,供您正在使用的主类使用?这会将函数隐藏在类接口(interface)屏障后面。

总的来说,如果可以避免的话,不要因为大小限制而随意拆分类文件;把属于一起的东西放在一起。

可怕的可能性

假设拆分是必要的,而正统的拆分(分成多个协同工作的类)是不可能的,那么问题就变成了:你会接受你的代码有多可怕? (这已经有点令人毛骨悚然了,因为在一个文件中有太多的功能;你能忍受它变得更令人毛骨悚然吗?)

假设您的类在 4 个(或更多)文件中。

  1. 类.h
  2. class.c
  3. class1.c
  4. class2.c

头文件 class.h 是正统的 - 自包含且幂等。外部世界(即在该源代码集合之外)使用它来访问类提供的设施。

文件 class1.cclass2.c 包含类中函数的实现。可以给它们一个单独的、独特的文件后缀——这样做可能有一些好处。这些文件不是为独立编译而设计的;它们严格来说是为了方便将源代码拆分,因为类太大了。

class.c 文件是您编译的文件。它包含:

  1. #include "class.h"
  2. 类内部所需的其他定义。
  3. #include "class1.c"
  4. #include "class2.c"

因此,尽管源代码被拆分,您实际上编译了一个文件,class.c

在您的makefile 或等效文件中,您指定class.o 依赖于头文件和所有三个源文件;如果其中任何一个发生变化,那么您需要重新编译整个过程。更改实现文件(class1.cclass2.c)的后缀的一个优点是它们不会单独编译,因为 C ( Objective-C )编译器。更改后缀的一个缺点是,除非您告诉它文件类型,否则您的语法感知编辑器不会知道单独文件的正确语法突出显示。如果您使用 IDE,它可能也不会对这种诡计感到好笑。

如果您在一台机器上工作,其中源代码的大小意味着它不能像这样一次全部编译,那么您就被打败了。这种技术根本没有帮助;您必须将文件拆分并单独编译。在这种情况下,请认真考虑是否可以将代码干净利落地拆分为多个类,以正统的方式进行管理。

关于objective-c - 我可以创建只对我的类可见的 C 函数,它被分成多个文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6169167/

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