2013-03-13 57 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数组应 是作案网络能够通过程序,并保留其程序 启动和程序终止之间的最后存储值。

相关问题