【发布时间】:2012-03-22 23:56:24
【问题描述】:
我正在开发一个 C 项目(对 C 来说仍然很新),并且我试图在编译时删除所有警告。
这个项目的原始编码人员制作了一个名为 dyn_char (dynamic char arr) 的类型,它是一个 unsigned char * 类型。以下是其中一个警告的副本:
警告:参数 #1 与原型不兼容:原型: 指向 char 的指针:“.../stdio_iso.h”,第 210 行参数:指向 无符号字符
他们还使用许多标准字符串函数,例如 strlen();,所以我删除这些警告的方式是这样的:
strlen((char *)myDynChar);
我可以这样做,但有些文件有数百个这样的警告。我可以进行查找和替换来搜索 strlen( 并替换为 strlen((char*),但有更好的方法吗?
是否可以使用宏来做类似的事情?也许是这样的:
#define strlen(s) strlen((char *)s)
首先,这行得通吗?其次,如果是这样,这样做是不是一个坏主意?
谢谢!
【问题讨论】:
-
简单的解决方案(如果它不会搞砸的话)是将
dyn_char重新定义为char *,而不是unsigned char *。这可能吗? -
好点,我认为这会导致一些其他问题,但我不确定。代码中有 cmets 表明他们已经考虑过这样做,但由于某种原因他们没有这样做。也许,他们过去并没有过多关注这些警告 :)
-
对
strlen的调用是否已经存在(他们是否这样做了)?我之所以问,是因为您可能只是出于该目的使用了一种不打算用作字符串的类型(0-terminatedchar数组)。否则,如果他们真的是那样的意思,那就是设计错误。