Вы не можете, и непонятно, зачем вам это нужно. Файл .m
на самом деле не связан с C; он просто содержит определенные макросы, которые расширяются на m4
, чтобы создать новый текстовый файл. Вы не можете указать только из выходного файла, который был создан макросами.
Простая аналогия - это пара сумм, таких как 1 + 3
и 2 + 2
. Две суммы (представляющие файлы .m
) оцениваются до 4, но только с учетом 4, вы не можете сказать, была ли она произведена с 1 + 3
или 2 + 2
.
В качестве альтернативы вы можете сгенерировать любую сумму, которую вы хотите (0 + 4
, 1 + 3
, 1.5 + 2.5
), и никто не мог сказать, что это была «неправильная» сумма. Аналогичным образом, вы можете создать любое из бесконечного числа действительных файлов .m
, которые при прохождении через m4
вернут исходный файл .c
, но это было бы не очень полезно.
Это первая строка, которая должна быть 'm4 prog.m> prog.c'? –
Нет. Что я написал, должен был перейти от .m к .c. С .m файлом вам нужно преобразовать в .s с помощью m4 prog.m> prog.s. Затем один раз в сборке вам нужно преобразовать это в C, используя gcc. Вопрос, который я задал, состоял в том, как перейти к обратному пути от .c к .m, но ниже ответ положил проблему довольно хорошо. –
Вы говорите, что gcc конвертирует язык ассемблера в C? Даже если это произошло, вы не ссылаетесь на 'prog.s' после его создания. –