windows.h包含了sql.h么咋找不到他们间的包含关系( 二 )

另一种就是反着来了,grep 遍历搜索:C:\\MinGW\\x86_64-w64-mingw32\\include\u0026gt;grep -R -i "include.*sql\\.h" *odbcinst.h:#include \u0026lt;sql.h\u0026gt;sqlext.h:#include \u0026lt;sql.h\u0026gt;C:\\MinGW\\x86_64-w64-mingw32\u0026gt;grep -R -i "include.*odbcinst.h" *C:\\MinGW\\x86_64-w64-mingw32\u0026gt;C:\\MinGW\\x86_64-w64-mingw32\\include\u0026gt;grep -R -i "include.*sqlext\\.h" *sqlucode.h:#include \u0026lt;sqlext.h\u0026gt;C:\\MinGW\\x86_64-w64-mingw32\\include\u0026gt;grep -R -i "include.*sqlucode\\.h" *sqlext.h:#include "sqlucode.h"不对啊,后面这两个互相包含啊。后来我怀疑题主在逗我,试试编译一个:#include \u0026lt;stdio.h\u0026gt;#include \u0026lt;windows.h\u0026gt;int main(int argc, char *argv ) { #ifndef ODBCVER printf("What?"); #else printf("ODBCVER %x\", ODBCVER); #endif return 0;}\u0026gt; gcc v.c \u0026amp;\u0026amp;aWhat?其他工具编译的时候是不是自动加了一些库的?------------------------------------- 1月13日补充 --------------------------------又想到了 gcc -S 参数可以输出预编译的结果。题主如果是使用 VisualStudio 编译,可以给编译选项加 /P 参数试试 (预处理到文件),看看输出结果
■网友
【windows.h包含了sql.h么咋找不到他们间的包含关系】 谢邀
这个包含关系是可以很深的。如果你真想搞明白,可以单独把 sql.h 删掉或者改个名字,然后编译。编译器会告诉你哪个头文件(假如A文件)找不到 sql.h 。你再把A文件删了再编译。就这么一步步很快就找到了。
当然我是不想做这事情,因为这会导致我编译完成的工程下次要rebuild……

■网友
你打开sql.h可以发现一个注释,意思是,前置条件,包含windows.h,很明显了要用这东西先包含windows.h再包含sql.h,就是说你的问题的回答是没有包含


推荐阅读