【发布时间】:2021-09-18 22:09:31
【问题描述】:
我尝试将 argv 值分配给常量指针,认为将非常量分配给 const 变量是安全的。
不幸gcc投诉:
> make CFLAGS=-Wall mein
cc -Wall mein.c -o mein
mein.c: In function ‘main’:
mein.c:5:30: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
const char *const*const a = argv + 1;
^~~~
mein.c:5:26: warning: unused variable ‘a’ [-Wunused-variable]
const char *const*const a = argv + 1;
对应的C源代码如下:
2021-07-08 13:49 mein.c Page 1
1 #include <stdlib.h>
2
3 int main(int argc, char *argv[])
4 {
5 const char *const*const a = argv + 1;
6 return 0;
7 }
我相信我的声明说a 是一个常量指针,指向一个指向常量字符串的常量指针数组。
我也相信char *argv[]等价于char **argv。
问题是:是我错了,还是 gcc 错了?
【问题讨论】:
-
“虽然真正的程序员不需要
const” - “真正的程序员在 0 和 1 中编写所有内容”。我不知道是谁告诉你的,但这是废话。请编写 const 正确的代码。 -
@StefanRiedel 因为“真正的程序员”是一种笑话(从今天的角度来看),所以关于真正的程序员的一切都被认为是一个笑话。或者也许认为我的陈述只是具有讽刺意味。
-
@4386427 显然我没有看到问题所在,也许可以更详细地解释一下。
-
好的,我明白了。在 SO 上很难区分讽刺和坏心态。
-
@4386427 该站点的主页显示“此超文本页面集合版权所有 1995-2005,由史蒂夫·萨米特所有。”。
标签: c gcc-warning gcc4