2016-07-17 11 views
0

Um eine C-Datei aus m-Datei zu konvertieren Ich benutzeWie konvertiert man eine C-Datei in eine .m-Datei in bash?

m4 prog.m > prog.s 
gcc -o prog prog.s 
./prog 

Ist es möglich, den anderen Weg zu gehen?

Ich weiß, was Sie tun können

gcc -S prog.c 

es eine .s-Datei zu machen, aber wie bekomme ich es in ein .m?

+0

Soll diese erste Zeile 'm4 prog.m> prog.c' sein? –

+0

Nein. Was ich gepostet habe, war von einer .m zu einer .c. Mit .m-Datei müssen Sie in eine .s-Datei konvertieren, indem Sie m4 prog.m> prog.s verwenden. Dann, einmal in Assembly, müssen Sie dies mit Gcc in C konvertieren. Die Frage, die ich stellte, war, wie man den umgekehrten Weg von einer .c zu einer .m gehen könnte, aber die Antwort unten stellte das Problem ziemlich gut dar. –

+0

Willst du damit sagen, dass gcc die Assemblersprache in C umwandelt? Selbst wenn dies der Fall ist, beziehen Sie sich nach dem Generieren nicht auf "prog.s". –

Antwort

0

Sie können nicht, und es ist nicht klar, warum Sie müssten. Die .m Datei ist nicht wirklich mit C verwandt; Es enthält nur bestimmte Makros, die um m4 erweitert werden, um eine neue Textdatei zu erstellen. Aus der Ausgabedatei konnte man nicht erkennen, welcher Text von den Makros erzeugt wurde. Eine einfache Analogie ist ein Paar Summen wie 1 + 3 und 2 + 2. Die zwei Summen (die die .m Dateien darstellen) werden beide mit 4 bewertet, aber nur mit 4, es gibt keine Möglichkeit, festzustellen, ob es von 1 + 3 oder 2 + 2 erzeugt wurde.

Alternativ könnten Sie jede gewünschte Summe generieren (0 + 4, 1 + 3, 1.5 + 2.5), und niemand könnte sagen, es war eine "falsche" Summe. Genauso könnten Sie eine aus einer unendlichen Anzahl von gültigen .m Dateien erzeugen, die, wenn sie durch m4 laufen, Ihnen die ursprüngliche .c Datei zurückgeben würden, aber es wäre nicht wirklich eine nützliche Sache zu tun.

+0

Ah das macht Sinn. Vielen Dank. –