У меня есть код устаревшего кода, который имеет условную предварительную обработку, например. #ifdef
и #else
, где я нашел использование макроса __attribute__
. Я сделал быстрое исследование и выяснил, что он специфичен для компиляторов GNU. Я должен использовать этот устаревший код в Visual Studio 2010 с использованием компилятора MSVC10 и, видимо, он жалуется повсюду, он видит атрибут ((не используется)), хотя он защищен #ifndef
и #ifdef
s. Примером может служить:__attribute __() макрос и его влияние на проекты на Visual Studio 2010
#ifdef __tone_z__
static const char *mcr_inf
#else
static char *mcr_inf
#endif
#ifndef _WINDOWS
__attribute__((unused)) % this is causing all the problem!!
#endif
= "@(#) bla bla copyright bla";
#ifdef __tone_z__
static const char *mcr_info_2a353_id[2]
#else
static char *mcr_info_2a353_id[2]
#endif
__attribute__((unused)) = { "my long copyright info!" } ;
Я действительно изо всех сил, чтобы понять, если это очень плохо спланирована код или это просто мое недоразумение. Как избежать обычных ошибок компилятора и компоновщика с этой директивой __attribute__()
? Я начал получать ошибки C2061 (отсутствующие идентификаторы/неизвестные). У меня есть все необходимые файлы заголовков, и ничего не пропало, может быть, кроме компилятора GNU (чего я не хочу !!).
Кроме того, кажется, что символ конца строки ;
также перепутался, когда я беру код в windows .... argh .... Я имею в виду UNIX end-of-line и Windows EOL, как можно Я использую этот код без изменения тела .... Я могу определить в моей странице свойств о _WINDOWS thingy, но не может автоматически настроить распознавание символов EOL.
Любая помощь приветствуется! Спасибо.
Заметим, что '__attribute__' не макро. Просто убедитесь, что вы '#define _WINDOWS 1' при компиляции на окнах. –
@MarcGlisse спасибо ... это то, на что я надеялся. Я использовал Visual Studio 2010, где, если вы нажмете CTRL +, вы увидите все предопределенные атрибуты функции и разрешенные макросы - _WINDOWS не существует. Я сделаю это либо в листе свойств, либо в моем основном файле runner. –
ha9u63ar
Вы, вероятно, хотели '#ifndef _MSC_VER' вместо' #ifndef _WINDOWS'. Существует определение с именем '_WINDOWS_' (но обратите внимание на дополнительное конечное подчеркивание), когда вы включаете' ', но обычно способ отличить GCC/MSVC определяется с помощью' GCC' и '_MSC_VER'. –
Groo