Это предупреждение / ошибка, по-видимому, связано с тем, что различные версии препроцессора MSVC
обрабатывают конкатенации строк и букв в строках #pragma comment()
(см. Примечание ниже). При добавлении пробелов между (заключенными в кавычки) литералами и макросами __FUNCxxx__
предупреждение исчезает (и это, скорее всего, устранит проблему с компоновщиком, приводящую к проблеме «недопустимая надстройка»).
Предполагая, что «проблема» появилась в выпуске VS-2015, можно обойти это, используя следующий код:
#if (_MSC_VER >= 1900) // This is for VS-2015 - see link below for others versions
#define EXPORT comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)
#else
#define EXPORT comment(linker, "/EXPORT:"__FUNCTION__"="__FUNCDNAME__)
#endif
Вы можете иметь возможность использовать версию с добавленным пробелом более ранние компиляторы, но я добавил условное выражение, следуя философии: «Если ничего не сломано, не исправляйте его!»
Значения макроса _MSC_VER
для использования в других версиях перечислено здесь .
ПРИМЕЧАНИЕ. Пример, приведенный на этой веб-странице Microsoft , включает пробелы между строковыми литералами и предопределенными макросами:
Для комментариев, которые принимают параметр comment-string, вы можете использовать макрос в любом месте, где вы будете использовать строковый литерал, при условии, что макрос расширяется до строкового литерала. Вы также можете объединить любую комбинацию строковых литералов и макросов, которые расширяются до строковых литералов. Например, допустимо следующее утверждение:
#pragma comment( user, "Compiled on " __DATE__ " at " __TIME__ )