Конвертировать код C99 в C89

Как я могу автоматически конвертировать исходный код c99 в c89? Я хочу скомпилировать библиотеки c99 с Visual C ++, но MSVC поддерживает только c89. Многие изменения являются только синтаксическими, например, инициализаторы структуры, и вы можете написать инструмент для «de-c99». код автоматически. Этот препроцессор существует?

 Jack29 мая 2012 г., 20:54
@PaulR: как мне это сделать? а с GCC это тоже возможно? Спасибо!
 K-ballo29 мая 2012 г., 19:59
Было бы меньше работы, если бы вы скомпилировали его как C ++ вместо этого ...
 Paul R29 мая 2012 г., 20:03
Вы можете использовать современный сторонний компилятор, такой как Intel ICC, который можно подключить к Visual Studio.
 Viktor Latypov29 мая 2012 г., 19:53
Я считаю, что причиной создания C99 было именно то, чтобы избежать таких «препроцессоров» :) Для «будущего» (да, каламбур предназначен) - избегайте современных функций, если вы используете старые инструменты.
 Fred Larson29 мая 2012 г., 20:03
Проверьте этот ответ:stackoverflow.com/a/146419/10077

Ответы на вопрос(3)

Рекламный роликComeau C / C ++ компилятор могу сделать это.

В качестве альтернативы используйте подходящий компилятор C (например, GCC или Clang через MinGW, Pelles C, Intel) и свяжите полученные объектные файлы. Однако не все из них (в частности MinGW) поддерживают формат отладки Microsoft.

Переводчик исходного кода на основе Clang:

https://github.com/libav/c99-to-c89/

Что вам нужно, этосистема трансформации программ, Такой инструмент читает исходный код, создает структуры данных компилятора (такие какдеревья абстрактного синтаксиса, позволяет применять преобразования (источник-источник) к этим структурам, а затем может восстанавливать источник из измененных структур данных.

Вам нужен тот, который может проанализировать C99 и преобразовать в C89. нашDMS Software Reengineering Toolkit может сделать это, используя егоC Front End (который может обрабатывать оба диалекта C, включая MSVC 89, а также ObjectiveC). Наличие зрелого парсера необходимо, если вы хотите это сделать.

Многие люди могут предположить, чтоall вам нужен синтаксический анализатор C99. На практике это не так; чтобы сделать какие-либо интересные преобразования на типичных компьютерных языках, вам нужны данные таблицы символов, некоторый поток данных и т. д. Для получения более подробной информации см. мое эссе оЖизнь после разбораи как DMS обеспечивает эту жизнь.

Одним из таких аспектов является то, как вы кодируете замену инициализаторов структуры. Вы можете сделать это с помощью специального кода, который проходит CST A99, находит такие инициализаторы структуры и процедурно взламывает дерево. Да, это работает, но это нелегко, и вы должны знать огромное количество о структуре дерева. DMS предлагает перезапись от источника к источнику, так что вы можете писать шаблоны, которые распознают идиомы, которые вы хотите изменить, и шаблоны, которые создают результирующие идиомы, все с использованием синтаксиса поверхности C.

Ваш ответ на вопрос