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 に答える