Вопрос по c, visual-c++ – Конвертировать код C99 в C89

10

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

Проверьте этот ответ:stackoverflow.com/a/146419/10077 Fred Larson
@PaulR: как мне это сделать? а с GCC это тоже возможно? Спасибо! Jack
Вы можете использовать современный сторонний компилятор, такой как Intel ICC, который можно подключить к Visual Studio. Paul R
Было бы меньше работы, если бы вы скомпилировали его как C ++ вместо этого ... K-ballo
Я считаю, что причиной создания C99 было именно то, чтобы избежать таких «препроцессоров» :) Для «будущего» (да, каламбур предназначен) - избегайте современных функций, если вы используете старые инструменты. Viktor Latypov

Ваш Ответ

3   ответа
7

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

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

3

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

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

1

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

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

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

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

Похожие вопросы