2012-12-21 79 views
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 

什麼是警告的原因,以及如何解決它?

+1

另請參閱http://stackoverflow.com/questions/4419293/warning-format-not-a-string-literal-and-no-format-arguments – nos

回答

0

它抱怨此行

printf(*A,##args); 

將其更改爲

printf(""MESSAGE, ##args); 
+0

如果我改成這行'printf(MESSAGE,## args);',它會提供編譯錯誤。在這一步'MACRO_TEST();' – MOHAMED

+0

確定,請參閱編輯。現在應該在空的MESSAGE案例中工作 – tom

0

你一定要明白,你的第一個參數的printf是一個指針數組爲char,對不對?

我會傾向於將「這是一個測試」添加到原始printf,並追加(使用##)MESSAGE,然後參數(可能沒有##,但不確定)。

+0

他使用* A而不是A,所以參數不是數組。 – nos

+0

啊,好點。我評論的其餘部分仍然適用於tho。 –

相關問題