我在 C 程序中定义了以下宏:
#define ISE1 "cust_add"
#define ISE2 "cust_sub"
#define ise_inst(inst, a, b, c) \
asm volatile (
" " inst " %1, %2, %0 \n\t" \
: "=r" (c) \
: "r" (a), "r" (b) \
: "%g0" \
)
在主程序中,我使用以下参数调用宏:
ise_inst(ISE1, inp1, inp2, res);
理想情况下,预处理器应该扩展整个内容,以便得到以下结果:
asm volatile (
" cust_add %1, %2, %0 \n\t"
: "=r" (res)
: "r" (inp1), "r" (inp2)
: "%g0"
);
任何人都知道我做错了什么?目前,预处理器告诉我
错误:在字符串常量之前解析错误(@ line:“”inst“%1,%2,%0 \ n \ t”)
答案 0 :(得分:3)
在\
行之后,您似乎错过了asm volatile(
行续行字符。
答案 1 :(得分:1)
除了缺少\
之外,汇编程序指令必须按照以下方式进行字符串化:
#define ise_inst(inst, a, b, c) \
asm volatile ( \
" " #inst " %1, %2, %0 \n\t" \
: "=r" (c) \
: "r" (a), "r" (b) \
: "%g0" \
)
请注意#
之前的小inst
。如果您使用ISE1
调用您的宏,则会展开为"ISE1"
。
答案 2 :(得分:0)
您是否忘记了\
之后的反斜杠字符(asm volatile (
)?