Include C file

出自我的blog 原文链接:  http://finaldie.com/wordpress/?p=21  

  好吧, 看到标题你一定认为我犯了一个big mistake, 我没有遵循include .h标准范式去编写程序, 不过我还是想说说这里面的好处 :)

  现在我们有一个需求, 想要编写一套事件库以便适应不同的平台(linux, freebsd … ), OK, 这里有一个显然的问题是我们需要一套抽象接口, 以便不同的平台都去遵循使用它们, 在不同平台下编译可以使用相应的.c文件, 但是如何在编译期去找到不同的实现文件那? 因为不同的实现文件需要在编译期指定好, 写在Makefile里做参数? 显然不够智能, 我们还是希望可以auto build. 于是我们想出了一套看似完美的方案, 为不同平台建立不同命名的头文件, 比如linux下使用 ev_epoll.h, freebsd下使用ev_kqueue.h, 不过这两个文件内部使用完全相同的接口定义, 一般来讲这没什么问题, 我们只需要在framework里根据不同平台include不同的header即可~ . 不过这里有个潜在的问题, 我们一旦修改了抽象接口定义, 不但要修改响应实现文件(这不可避免), 还需要级联的维护响应的headers, 这看起来很糟糕, 然后聪明的我们又想出来一个升级方案, 在这些不同平台的headers里面统一include一个global header(包含抽象描述), 我们拿着这套方案感觉很nice~ , 不过我们一旦修改, 仍然不可避免的去要修改global header, 虽然代价已经很小了~ :D

  好了, 赘赘的说了一大堆, 开始进入正题, 我们能不能有什么办法去掉这个header, 因为这个header本质上没有存在的价值, 外部并需要看到他, 多个它放在那会让使用者头大不已, 请出我们今天主角:”include .c”, 我们先了解下include, 其实它并不在乎include什么东东, 只要语法正确即可~ , 那么利用这个特性, 我们直接include .c(相应平台的具体实现文件, 比如ev_epoll.c/ev_kqueue.c), 你可以理解为他们的代码被copy paste到include的位置, 然后我们不需要任何头文件的依赖, 也不需要为修改接口而相应去修改一个根本没有存在必要的header.

  :D , 最后简单说下编译这样文件的过程, 因为我们已经include.c了, 所以我们在写Makefile的时候就不需要再去把这个.c文件填进去了, 否则容易出现各种声明,变量不存在的error, 调用include .c的文件会自己帮我们把它copy paste过去, 我们就不用操心了, 是不是很简单 :)

Have fun~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
include virtual在使用上有什么区别? 在ASP中,include fileinclude virtual都是用于包含其他文件的指令。两者的区别在于文件的路径指定方式和查找路径的范围。 使用include file时,需要提供被包含文件的相对路径。这意味着被包含文件必须与引用它的文件在同一目录或子目录中。例如,如果被包含文件位于相同目录中,可以使用以下格式进行包含:`<!-- #include file="myfile.inc" -->`。这种方式适用于文件在相同目录或子目录的情况。 而使用include virtual时,需要提供被包含文件的虚拟路径。虚拟路径是相对于网站的根目录的路径。这意味着被包含文件可以位于任何目录中,只要提供正确的虚拟路径即可。例如,如果被包含文件位于脚本虚拟目录中,可以使用以下格式进行包含:`<!-- #include virtual="/scripts/tools/global.inc" -->`。这种方式适用于文件位于不同目录或不同网站的情况。 总结起来,include file适用于文件位于同一目录或子目录的情况,而include virtual适用于文件位于不同目录或不同网站的情况。两者的使用方式和路径指定方式不同,需要根据具体情况选择合适的方式来包含文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [HTML中include file的用法](https://blog.csdn.net/weixin_43153155/article/details/108245429)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值