【问题标题】:How to include just one function from different C file如何仅包含来自不同 C 文件的一个函数
【发布时间】:2016-04-04 02:18:00
【问题描述】:

我正在做一项家庭作业,为我的操作系统课程实现不同的页面替换算法。我遇到的一个问题是我想在不同的 C 文件中实现每个算法,并且在每个单独的文件中,使用相同的函数名称,如 search()insert()updatePageTable() 等。

但是,当我编译文件时,编译器会抱怨重复符号。有没有办法从每个不同的算法文件中导入主要测试函数并让这些函数引用它们的文件函数?

【问题讨论】:

  • 你能试着解释你真正的问题,而不是this XY problem
  • 你可以通过声明static来隐藏文件中的函数;这是一个很好的做法。您将拥有至少一个不那么隐藏的功能(有时是main(),有时是其他一些功能)。如果非静态函数不是main(),那么您应该有一个声明该函数的标头。函数实现的地方应该使用header,保证定义和声明匹配,函数使用的地方应该使用header,保证正确使用。
  • 请注意,给定程序只能包含任何给定函数名称的一个外部可见定义。也就是说,最多可以有一个文件定义了一个名为insert() 的全局(外部可见)函数,但可能有很多文件定义了一个名为insert() 的静态函数——但这些文件不能引用,甚至没有声明,全局函数。
  • @JonathanLeffler 非常感谢您的回复。这正是我需要知道的!

标签: c algorithm operating-system


【解决方案1】:

将 cmets 12 转换为答案。

您可以通过声明static 来隐藏文件中的函数;这是一个很好的做法。您将拥有至少一个不那么隐藏的功能(有时是main(),有时是其他一些功能)。如果非静态函数不是main(),那么您应该有一个声明该函数的标头。函数实现的地方要使用header,保证定义和声明匹配,函数使用的地方要使用header,保证正确使用。

请注意,给定程序只能包含任何给定函数名称的一个外部可见定义。也就是说,最多可以有一个文件定义了一个名为insert() 的全局(外部可见)函数,但可能有很多文件定义了一个名为insert() 的静态函数——但这些文件无法引用,甚至已经声明了全局函数。给定的源文件可以访问全局函数insert(),也可以访问它自己的静态函数insert(),但不能同时访问两者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多