在尝试编写通用代码以针对多个版本的ODBC标头进行编译时,我很好奇SQL_PARAM_OUTPUT_STREAM
是否可用。例如一个人可以这样写:
#include <sql.h>
#include <sqlext.h>
#if ODBCVER >= 0x380 // e.g. ODBC version >= 3.80 (*not* 3.08)
// SQL_PARAM_OUTPUT_STREAM is available
...
#endif
看着unixodbc sql.h,我看到它说:
/****************************
* default to 3.51 declare something else before here and you get a whole new ball of wax
***************************/
#ifndef ODBCVER
#define ODBCVER 0x0380
#endif
(我认为评论已经过时(?),因为看起来0x0380表示3.80。@TallTed指出这与3.08不同,人们可能会认为“ 3.8”在常规{{3}中的含义}。)
因此,这种定义形式使您可以在包含#define
之前对ODBCVER
做自己的<sql.h>
,并可能对其进行“降级”以仅支持较旧的标准进行编译。如果不这样做,它将是标题可以支持的最高版本。
...但是我在Microsoft文档中找不到关于ODBCVER
的任何信息。实际上没有标准的方法可以感知要针对其进行编译的头文件中的定义吗?像#ifdef SQL_PARAM_OUTPUT_STREAM
这样的东西作为sql.h
上的“特征检测”形式会更好吗?
答案 0 :(得分:1)
ODBCVER
可能不会出现在文档中,但绝对受支持。它通过Windows SDK一部分的ODBC标头显示。
例如,我当前系统上位于C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\sql.h
的最新SDK以及同一目录中的其他7个文件引用了ODBCVER
。