%macro printhello 0
section .rodata
%%msg: db "Hello, world.", 10, 0
section .text
push %%msg
call printf
add esp, 4
%endmacro
问题是每次宏出现在程序中时,NASM预处理器都会为标签发明一个新名称,msg
并且同一字符串会有多个定义"Hello, world."
我可以定义没有%%
前缀的字符串,但是如果宏会被更多使用不止一次,我会因为重新定义相同的符号而得到一个汇编错误,msg
. 那么如何避免该字符串的多个定义呢?