Я разыскал причину этих внезапных ошибок компилятора.
По великой традиции windows.h
кажется, что Microsoft ввела токены, которые вызывают конфликты имен с нашей базой кода.
В нашемточный случай, у нас было: #define Null (void*)0
Где-то в нашем коде нам нужно использовать макрос offsetof
и чтобы сделать его доступным, мы #include <stddef.h>
Я отследил stddef.h
по очереди включает в себя crtdefs.h
, который в конечном итоге включает sal.h
, где наш макрос Null
, кажется, конфликтует с аннотацией исходного кода в заголовках MS ...
В качестве обходного пути мы сделали:
#if defined(_MSC_VER) && _MSC_VER >= 1600
#pragma push_macro("Null")
#undef Null
#endif
#include <stddef.h>
#if defined(_MSC_VER) && _MSC_VER >= 1600
#pragma pop_macro("Null")
#endif
Наше использование Null
как макрос спорно, все-таки я ожидал бы MS, чтобы найти способ, чтобы избежать столкновений с существующими базами кода.
1024 * Надеюсь, что помогает тем, кто сталкивается с той же проблемой.