c макро дублирующиеся аргументы - PullRequest
0 голосов
/ 06 февраля 2019

Я пишу трассировщик с сигнатурой функции:

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 голосов
/ 06 февраля 2019

Ваш макрос работает нормально.

Пример кода, показывающий, как:

#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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...