【问题标题】:Difference between gcc warnings and gcc error messagesgcc 警告和 gcc 错误消息之间的区别
【发布时间】:2020-09-26 00:19:19
【问题描述】:

我在代码块中编译这段代码 sn-p,根本没有任何消息:

printf("adress of x %i\n",ptr);

现在我尝试通过终端和 gcc 编译它,但我收到了这条消息:

warning: format ‘%i’ expects argument of type ‘int’, but argument 2 has type ‘int **’ [-Wformat=]

gcc 无论如何都会生成一个可执行文件(它运行)。我做错了什么?

【问题讨论】:

  • 总是使用 %p 作为指针。
  • Warning = 你做错了,但不会阻止我编译,Error = 你做错了(如果你的参数是int**,作为参数传递@987654324 @)
  • 警告是知识渊博的用户可能做的不错,但学习者不太可能。错误是代码严重错误。
  • 格式 %i 用于整数,%p 用于指针。在某些平台上,指针的大小可能与整数相同,但这绝对不能保证。函数printf 将从内存中读取格式说明符指示的字节数,并将数据相应地呈现为整数,但如果指针大小与sizeof(int) 不同,则会发生奇怪的事情。

标签: c++ c gcc gcc-warning


【解决方案1】:

警告是“不要碰盘子;它很烫”。

错误是“你触摸了盘子,它真的很烫,现在你没有手指了”。


警告是编译器告诉您可以做得更好,但现在可以继续。错误是不可恢复的:您需要修复所述问题才能成功编译。

请注意,为了获得良好、安全的代码,通常建议您将警告与错误一样严肃对待。例如,您今天收到的警告是告诉您您的 printfscanf 格式字符串似乎是错误的,虽然不是编译错误,但可能会导致崩溃(或更糟糕的是,微妙的奇怪错误) 在运行时。


格式说明符%p 用于指针。

【讨论】:

  • 次要观点:我会避免使用“我们……”。要么说“我……”,要么明确说出你在为谁说话。甚至“共识是……”也可以。
  • @cigien 它被 C++ 社区普遍接受,不是吗?如果您不同意,很高兴更改措辞,但我认为我已经 15 或 20 年没有听到过关于这一点的异议
  • 不,没有异议,只是措辞让我感到不舒服 :) 我已经做了我想要的编辑,如果你想回滚也没关系,这没什么大不了的.
猜你喜欢
  • 2011-02-27
  • 1970-01-01
  • 2011-05-31
  • 2013-11-10
  • 2010-12-03
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2016-08-01
相关资源
最近更新 更多