Прототипы функций без имени аргумента и объявление функции без типа данных в Visual Studio

Добрый день,

Мне было поручено реализовать код, который, кажется, был написан для 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 из-за плагина компилятора. Есть ли опция, которая может разрешить этот стиль объявлений функций?

Спасибо,

0

Решение

Насколько я знаю, MS VC ++ не поддерживает C99.

Что касается определения функции этого определения

void myfunc(variable1, pointer1) //Declaration
{
;//...
}

недействителен даже для C89. После этого заголовка

void myfunc(variable1, pointer1)

и перед открывающей скобкой должны быть объявления идентификатора.
Если эти объявления присутствуют, и вы сделали просто опечатку, то вы можете использовать MS VC ++ 2010. Но вы должны скомпилировать код в виде кода C.

Согласно стандарту C

6 Если декларатор включает список идентификаторов, каждое объявление в
в списке объявлений должен быть хотя бы один декларатор,
деклараторы должны объявлять только идентификаторы из списка идентификаторов,
и каждый идентификатор в списке идентификаторов должен быть объявлен.
идентификатор, объявленный как имя typedef, не должен быть повторно объявлен как
параметр. Объявления в списке объявлений не должны содержать
спецификатор класса хранения, отличный от регистра и без инициализаций.

0

Другие решения

Это разница между C и C ++.

На самом деле, в C ++, пожалуйста, смотрите мои исправленные аннотации ниже:

void myfunc(int variable1, char* pointer1); // Declaration

void myfunc(int variable1, char* pointer1)  // Definition
{
// ...
}
0

По вопросам рекламы [email protected]