2013-03-13 80 views
10

我的主要功能如下:傳遞參數1丟棄限定符

int main(int argc, char const *argv[]) 
{ 
    huffenc(argv[1]); 
    return 0; 
} 

編譯器返回警告:

huffenc.c:76: warning: passing argument 1 of ‘huffenc’ discards qualifiers from pointer target type

作爲參考,huffenc需要char*輸入,並執行該功能,通過樣本輸入「無謂」通過./huffenc senselessness

這個警告意味着什麼?

+5

你說'huffenc'需要'char *',但是你傳遞給它'char const *'... – 2013-03-13 23:37:22

+0

真的嗎?這是否意味着我必須使用類型強制呢? – 2013-03-13 23:38:11

+0

我想你可以參考這個問題也可以參考http://stackoverflow.com/questions/2316387/initialization-discards-qualifiers-from-pointer-target-type – Ganesh 2013-03-13 23:38:25

回答

15

這意味着您將const參數傳遞給採用非const參數的函數,該參數可能因顯而易見的原因而不好。

huffenc可能不需要非const參數,所以它應該採取const char*。但是,您對main的定義是非標準的。

C99標準第5.1.2.2.1(程序啓動)指出:

稱爲在程序啓動的功能被命名爲主力。該實現聲明不具有此功能的原型 。它應是int類型的返回類型和不帶 參數定義德音響:雖然任何人的名字,可以 使用

int main(void) { /* ... */ } 

或兩個參數(這裏稱爲argc和argv,因爲他們是本地的,其中聲明它們的功能):

int main(int argc, char *argv[]) { /* ... */ } 

或等同物; 9),或在一些其它實施-d有限的方式。

並接着說......

...參數argc和argv和琴絃指向argv數組應 是作案網絡能夠通過程序,並保留其程序 啓動和程序終止之間的最後存儲值。

相關問題