nginx 模块头文件包含问题

Posted ncist-m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx 模块头文件包含问题相关的知识,希望对你有一定的参考价值。

现象:

编译时遇到一个问题,提示xxx未定义,xxx在b.h中使用,在a.h中定义。
b.h没有包含任何头文件。刚开始以为是写错了,但是后来一想不是这样。

想法1:

编译是把头文件复制到c文件中,头文件不包含其他头文件也能说得过去。
是不是只需要在c文件包含b.h之前包含上a.h就可以了?
肯定是可以这样啊。

想法2:

细想就会发现有问题,难道我每次记得使用b.h之前要包含上a.h,那为啥不把#include <a.h>放在b.h里面呢?
这样确实更好了。

想法3:

但是细看a.h就发现有问题,a.h的结构是这样的:

#include <ngx_config.h>
#include <ngx_core.h>
/*
    用户定义
    其中包括了b.h中使用的"未定义"的结构体
*/

/*
    模块内部头文件
    其中就包括了b.h
*/

这样就明白了,原来是模块的头文件都被包含在这个a.h,即对应着ngx_http.h,使用时仅需包含这个头文件即可。

以上是关于nginx 模块头文件包含问题的主要内容,如果未能解决你的问题,请参考以下文章

nginx开发头文件的包含顺序

通过Nginx定义Header头信息

在可可触摸框架的框架模块内包含非模块化头文件

C++中头文件设计

Nginx的stub_status模块的作用及配置文件修改

c语言怎么包含自己写的头文件?