Добрый день,
Мне было поручено реализовать код, который, кажется, был написан для C99 в Visual Studio 2010. Я исследовал многочисленные потоки совместимости с C99 / Visual Studio, но я не нашел ничего, связанного с исправлением моей проблемы.
В основном, код, который я должен перенести, имеет прототип функции и объявление, написанное следующим образом:
void myfunc(int, char*); //Prototype
void myfunc(variable1, pointer1) //Declaration
{
;//...
}
Но Visual Studio 2010 только готов принять
void myfunc(int variable1, char* pointer1); //Prototype
void myfunc(int variable1, char* pointer1) //Declaration
{
;//...
}
Я не уверен на 100%, если это даже проблема совместимости с C99 или какая-то устаревшая практика кодирования, но исходный файл постоянно обновляется третьей стороной, и мне необходимо избегать каких-либо изменений в нем (таких как переименование каждого одна функция), для меня также является обязательным использование Visual Studio 2010 из-за плагина компилятора. Есть ли опция, которая может разрешить этот стиль объявлений функций?
Спасибо,
Насколько я знаю, MS VC ++ не поддерживает C99.
Что касается определения функции этого определения
void myfunc(variable1, pointer1) //Declaration
{
;//...
}
недействителен даже для C89. После этого заголовка
void myfunc(variable1, pointer1)
и перед открывающей скобкой должны быть объявления идентификатора.
Если эти объявления присутствуют, и вы сделали просто опечатку, то вы можете использовать MS VC ++ 2010. Но вы должны скомпилировать код в виде кода C.
Согласно стандарту C
6 Если декларатор включает список идентификаторов, каждое объявление в
в списке объявлений должен быть хотя бы один декларатор,
деклараторы должны объявлять только идентификаторы из списка идентификаторов,
и каждый идентификатор в списке идентификаторов должен быть объявлен.
идентификатор, объявленный как имя typedef, не должен быть повторно объявлен как
параметр. Объявления в списке объявлений не должны содержать
спецификатор класса хранения, отличный от регистра и без инициализаций.
Это разница между C и C ++.
На самом деле, в C ++, пожалуйста, смотрите мои исправленные аннотации ниже:
void myfunc(int variable1, char* pointer1); // Declaration
void myfunc(int variable1, char* pointer1) // Definition
{
// ...
}