c宏重复参数

时间:2019-02-06 08:58:47

标签: c macros

我正在编写具有函数签名的跟踪器:

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)

但是它不能正常工作

1 个答案:

答案 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