建议使用模块化C应用程序的方法是什么?

时间:2015-11-11 09:24:05

标签: c

我在Stack Overflow中读到,将C文件包含到另一个C文件中并不是最佳做法。我想知道如何在C中创建模块化应用程序。

据我所知,建议您包含的是头文件,它不包含代码实现本身,只包含"函数调用"。

编译器如何知道在哪里找到相应的代码? 它会自动查找与 .h 文件同名的 .c 文件吗?

一般来说,如何在C应用程序中分离代码?

2 个答案:

答案 0 :(得分:7)

一般来说,包含头文件而不是完整的c文件是最好的做法。您的编译器不需要知道任何其他代码的位置,只需要知道所使用函数的原型。

需要知道其他代码所在位置的流程部分是链接器,它不是编译器,而是包含在像gcc这样的完整解决方案中。

例如,在gcc中编译时,您可以添加链接器的引用,如注释中特别指出的那样。

关于与编译器gcc:

链接的示例,请归功于@jovit.royeca
  

假设您有一个名为string[] scopes = new string[] { YouTubeService.Scope.Youtube }; // here is where we Request the user to give us access, or use the Refresh Token that was previously stored in %AppData% UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret } , scopes , "test" , CancellationToken.None , new FileDataStore("Daimto.YouTube.Auth.Store")).Result; YouTubeService service = new YouTubeService(new YouTubeService.Initializer() { HttpClientInitializer = credential, ApplicationName = "YouTube Data API Sample", });

的程序主文件      

您正在使用文件demo.c的某些功能。你那么   需要做的是创建一个名为bit.c的标题,其中包含全局   来自bit.h的变量和函数原型,然后将其包含到bit.c demo.c中,然后将其链接到gcc中   像这样:

     

#include "bit.h"

一些完整的解决方案,例如eclipse for c / c ++,会自动假设项目中的所有c文件都会链接到主文件中。例如。

答案 1 :(得分:4)

推荐的方法是创建具有特定功能的模块(.c文件);将它与一个类进行比较。要使其他模块可以使用此功能,您需要创建一个头文件,其中包含模块公开的函数,数据类型和变量(可用)。

要创建程序,您可以编写或重新使用这些模块并从主程序中调用它们(要调用它们,您应该open头文件。)

makefile,或"项目"在IDE中告诉您的开发环境/编译器要编译哪些模块/ .c文件,然后链接器将它们链接到可执行文件中。

使用上述模块可以隐藏其他.c文件的实现(复杂性),