15

我的主要功能如下:

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

这个警告可能意味着什么?

4

1 回答 1

20

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

huffenc可能不需要非const参数,所以它应该带一个const char*. 但是,您的定义main是非标准的。

C99 标准第 5.1.2.2.1 节(程序启动)规定:

程序启动时调用的函数名为 main。实现没有声明这个函数的原型。它应定义为返回类型为 int 且不带参数:

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

或者带有两个参数(这里称为 argc 和 argv,尽管可以使用任何名称,因为它们是声明它们的函数的局部变量):

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

或等价物;9) 或以其他实现定义的方式。

并接着说...

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

于 2013-03-13T23:50:07.430 回答