Intereting Posts
Гибкие элементы массива могут привести к неопределенному поведению? член профсоюза доступа в c Как преобразовать MAC-адрес в соответствующий IP-адрес? Поплавки против рациональных чисел в произвольной точности дробной арифметики (C / C ++) Что такое файлы заголовков и файлы библиотеки? Что мне нужно сделать, чтобы связать с xlib? Метка case не сводится к целочисленной константе в C? Обмен в массиве char *, приводящий к проблемам Реализация malloc с gcc в проблемах arm7: malloc return NULL Как работает библиотека nl80211 & cfg80211? Статическая инициализация структуры в C Невозможно понять, что этот «вызываемый объект не является функцией» C ошибка времени Каков правильный способ справиться с «нехваткой памяти»? Я пишу программу в C, которая ищет номер, хранящийся в txt-файле, через BST, но есть ошибка, которую я не могу найти ISO C90 запрещает смешанные декларации и код из-за массивов. Как это исправить?

Как #ifdef по CompilerType? GCC или VC ++

Я использовал #ifdef Win32 для безопасных вызовов, sprintf_s как sprintf_s но теперь я хочу построить проект с помощью MinGW, и теперь это просто неправильно. Мне нужно использовать #ifdef VC++ или как-то так. Является ли это возможным?

    См. Таблицу «Определенные предопределенные macros Microsoft» для предопределенных макросов Visual C

    Вы можете проверить _MSC_VER .

     #ifdef __GNUC__ /*code for GNU C compiler */ #elif _MSC_VER /*usually has the version number in _MSC_VER*/ /*code specific to MSVC compiler*/ #elif __BORLANDC__ /*code specific to borland compilers*/ #elif __MINGW32__ /*code specific to mingw compilers*/ #endif 

    Предпочтительно, вы должны прибегать к использованию переносных символов. Я понимаю, что иногда эти символы не могут быть определены, поэтому вы можете увидеть проект Predef для обширного списка макросов препроцессора в отношении стандартов, компиляторов, библиотек, операционных систем и архитектур, которые не являются переносимыми.

    Однако функция, которую вы конкретно упомянули в этом вопросе, была включена в стандарт C11 в качестве части Приложения K.3, интерфейсов проверки границ (библиотека) .

    K.3.1.1p2 гласит:

    Функции, macros и типы, объявленные или определенные в K.3 и его подclassах, объявляются и определяются их соответствующими заголовками, если __STDC_WANT_LIB_EXT1__ определяется как макрос, который расширяется до целочисленной константы 1 в точке исходного файла, где соответствующий заголовок впервые включен

    Таким образом, вы должны поместить предпочтение при проверке __STDC_WANT_LIB_EXT1__ и использовать только символы, относящиеся к компилятору, когда этого не существует.