При попытке написать общий код для компиляции с несколькими версиями заголовков 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» означает в обычном разговор на полу .)
Таким образом, эта форма определения позволяет вам сделать свой собственный #define
из ODBCVER
до включения <sql.h>
и, возможно, "понизить" его, чтобы компилировать для поддержки только более старых стандартов. Если вы этого не сделаете, то это будет самая высокая версия, которую может поддерживать заголовок.
... но я не могу найти ничего о ODBCVER
в документации Microsoft. Нет ли на самом деле стандартного способа определить, какие определения содержатся в заголовочном файле, который вы компилируете? Будет ли что-то вроде #ifdef SQL_PARAM_OUTPUT_STREAM
лучше как форма «обнаружения функций» на sql.h
?