我正在编写具有函数签名的跟踪器:
void AO_TRACE(int level, char *macrostring, uint16_t type, uint32_t argument1, uint16_t argument2);
并具有有用的宏,可用于从宏制作字符串
#define strmacro(s) #s
我正在这样调用我的函数:
AOCS_TRACE(LEVEL_TRACE,strmacro(TRACE_qtn_guidance_TCOUNT0_VALUE), TRACE_qtn_guidance_TCOUNT0_VALUE, tcount[0],0);
是否可以编写一个宏来调用这样的函数
AOCS_TRACE(LEVEL_TRACE,newmacro(TRACE_qtn_guidance_TCOUNT0_VALUE), tcount[0],0);
换句话说,编写一个宏,该宏仅放置输入和输入本身的字符串表示形式。我尝试过:
#define TRACE(s) #s, s
和
#define TRACE(s) (#s, s)
但是它不能正常工作
答案 0 :(得分:0)
您的宏工作正常。
示例代码显示方式:
#include<stdio.h>
#include <stdint.h>
#define macro(s) #s,s
const int TRACE_qtn_guidance_TCOUNT0_VALUE= 123;
void AO_TRACE(int level, char *macrostring, uint16_t type, uint32_t argument1, uint16_t argument2) {
printf("Level: %d, String: <%s>, Type: %d: Arg1: %d, Arg2: %d\n", level, macrostring, type, argument1, argument2);}
int main(){
AO_TRACE(1, macro(TRACE_qtn_guidance_TCOUNT0_VALUE), 2, 3);
return 0;
}
预期的输出
Level: 1, String: <TRACE_qtn_guidance_TCOUNT0_VALUE>, Type: 123: Arg1: 2, Arg2: 3