传递参数1会丢弃指针目标类型的限定符

时间:2013-03-13 23:36:25

标签: c main argv

我的主要功能如下:

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

这警告意味着什么?

1 个答案:

答案 0 :(得分:18)

这意味着你将一个const参数传递给一个带有非const参数的函数,由于显而易见的原因这可能是不好的。

huffenc可能不需要非const参数,因此它应该采用const char*。但是,您对main的定义是非标准的。

C99标准第5.1.2.2.1节(程序启动)声明:

  

程序启动时调用的函数名为main。实施宣布否   这个功能的原型。它应该定义为int的返回类型和no   参数:

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

或有两个参数(这里称为argc和argv,但可能有任何名称   使用,因为它们是声明它们的函数的本地函数):

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

或等效的; 9)或其他一些实现定义的方式。

继续说......

  

...参数argc和argv以及argv数组指向的字符串必须   由程序修改,并在程序之间保留它们最后存储的值   启动和程序终止。