我有这种情况
#define PRE 0xF1
#define SR0 0B0000
#define SR1 0B0001
#define SR2 0B0010
#define SR3 0B0011
#define VIOTA(A0) asm(".byte PRE, A0")
int main()
{
VIOTA(SR1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有一个顶级宏扩展,但扩展包含更多的宏.这些没有扩大并导致一些问题.
我希望的行为是最终的扩张
asm(".byte 0xF1,0B0000")
这里内部宏已经扩展.我真的不确定我做错了什么.有什么建议?
#define S(x) #x
#define SX(x) S(x)
#define VIOTA(A0) asm(".byte " SX(PRE) ", " SX(A0))
Run Code Online (Sandbox Code Playgroud)
请在此处查看详细信息:C预处理器,对宏的结果进行字符串化
您正在将 PRE 作为传递给 asm() 的字符串的一部分。字符串中的宏不会展开。
这似乎对我有用:
#define PRE 0xF1
#define SR0 0B0000
#define SR1 0B0001
#define SR2 0B0010
#define SR3 0B0011
#define str(s) #s
#define VIOTA(PRE, A0) asm( ".byte " str(PRE) ", " str(A0) )
int main()
{
VIOTA(PRE, SR1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)