C 传递参数1将丢弃指针目标类型中的限定符
我的主要职能如下:C 传递参数1将丢弃指针目标类型中的限定符,c,main,argv,C,Main,Argv,我的主要职能如下: int main(int argc, char const *argv[]) { huffenc(argv[1]); return 0; } 编译器返回警告: huffenc.c:76:警告:传递'huffenc'的参数1将丢弃指针目标类型中的限定符 作为参考,huffenc接受一个char*输入,并通过/huffenc senseless执行该函数,示例输入为“senselessness” 此警告意味着什么?它意味着您正在将一个常量参数传递给一个函数,该函
int main(int argc, char const *argv[])
{
huffenc(argv[1]);
return 0;
}
编译器返回警告:
huffenc.c:76:警告:传递'huffenc'的参数1将丢弃指针目标类型中的限定符
作为参考,huffenc
接受一个char*
输入,并通过/huffenc senseless
执行该函数,示例输入为“senselessness”
此警告意味着什么?它意味着您正在将一个
常量
参数传递给一个函数,该函数使用了一个非常量
参数,由于明显的原因,该参数可能不好
huffenc
可能不需要非const
参数,因此它应该采用const char*
。但是,您对main
的定义是非标准的
C99标准第5.1.2.2.1节(程序启动)规定:
程序启动时调用的函数名为main。实现声明没有
此功能的原型。它应定义为返回类型int,且无
参数:
或者使用两个参数(此处称为argc和argv,但可以使用任何名称)
使用,因为它们是声明它们的函数的本地函数):
或同等品;9) 或者以其他实施方式定义
接着说
…参数argc和argv以及argv数组指向的字符串应
可由程序修改,并在程序之间保留其最后存储的值
启动和程序终止
你说
huffenc
接受一个char*
,但是你给它传递了一个char const*
…只需定义main而不使用const
。你可以,但这是不雅的(而且可能是危险的)。一个更好的解决方案是找出为什么huffenc
需要一个非常量指针,如果可能的话,将其更改为常量。这是main
的一个不正确的定义。不管怎样,只要从一开始就做好intmain(intargc,char*argv[])
@Kay:好吧,标准很明确,main的定义要么是intmain(intargc,char*argv[])
要么是intmain(void)
。它接着说,“5.1.2.2.1程序启动:参数argc和argv以及argv数组指向的字符串应可由程序修改…”因此,我认为它不正确。这当然会奏效,但为什么呢?这两个标准定义中的任何一个何时导致了错误程序?
int main(void) { /* ... */ }
int main(int argc, char *argv[]) { /* ... */ }