1

我有以下代码:

#include<stdio.h>
#include<stdlib.h>

#define MACRO_TEST(MESSAGE,args...) { \
  const char *A[] = {MESSAGE}; \
  printf("this is a test\n");\
  if(sizeof(A) > 0) \
    printf(*A,##args); \
}
int main () {
    MACRO_TEST();
    MACRO_TEST("hello %d\n",5);
    return 0;
}

当我编译它时,它会提供一条警告消息:

test.c:78:5: warning: format not a string literal and no format arguments

警告的原因是什么以及如何解决?

4

2 回答 2

0

它在抱怨这条线

printf(*A,##args);

将其更改为

printf(""MESSAGE, ##args);
于 2012-12-21T09:33:37.893 回答
0

您确实意识到 printf 的第一个参数是指向 char 的指针数组,对吗?

我倾向于在原始 printf 中添加“这是一个测试”,并附加(使用##)MESSAGE,然后是 args(可能没有##,但不确定)。

于 2012-12-21T09:38:07.557 回答