Является ли информация о версии для ODBC #define "ODBCVER" стандартной? - PullRequest
0 голосов
/ 18 октября 2019

При попытке написать общий код для компиляции с несколькими версиями заголовков 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?

1 Ответ

1 голос
/ 18 октября 2019

ODBCVER может отсутствовать в документации, но это определенно поддерживается. Он появляется во всех заголовках ODBC, которые являются частью Windows SDK.

Например, последний SDK в моей текущей системе на C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\sql.h вместе с 7 другими файлами в том же каталоге ссылаются ODBCVER.

...