2016-06-22 22 views
2

Also, mit dieser einfachen Eingabe,String-Länge in der M4 Präprozessor

define(foo, len($1)) foo(abcdef) 

ich, als Ausgabe:

2 

Wie kann ich diese 5, anstatt zu drucken? Ich kann keine Kombination von Zitat herausfinden, die len() tatsächlich den Wert $1, abcdef anstelle der Literalzeichenfolge `$1' erhält.

Edit 1: Der eigentliche Code in Frage sieht ungefähr so ​​aus:

define(`FILE', `#' /!\ $1 /!\ 
`#' ====substr(==============================,0,len($1))====)dnl 
FILE(`UTILITY.ASM') 
+0

Ich sehe nicht, was dies mit [c], seine [c-Präprozessor zu tun ] oder [Präprozessor] s im Allgemeinen (m4 ist ein Makro/Makro-Prozessor für allgemeine Zwecke). Bitte aktualisieren Sie Ihre Frage, um zu zeigen, wie sie mit diesen Tags zusammenhängt oder um diese Tags zu entfernen. –

+0

M4 wird normalerweise (oft auf SO!) Als Ersatz für Leute vorgeschlagen, die versuchen, komplexe Dinge mit dem CPP zu tun. Ich verlasse die Tags, denn es scheint, dass pragmatisch jede M4-Frage eine Erweiterung einer CPP-Frage ist; aber ich werde nicht beleidigt sein, wenn jemand sie entfernen möchte. ¯ \\ _ (ツ) _/¯ – ELLIOTTCABLE

Antwort

3

Die Unter zitierte von len($1) zu seiner unmittelbaren Auswertung führt während des Schrittes definieren so foo als 2 definiert ist

Ie dies entspricht:

define(foo, 2) foo(abcdef) 

Wenn voll zu zitieren, sind die Ergebnisse, was man erwartet:

define(`foo', `len($1)') foo(`abcdef') 
> 6 
+0

Dies funktionierte hervorragend für meine Anwendung! Vielen Dank! – ELLIOTTCABLE