提领类型双关的指针将破坏强重叠规则

最近复习C/C++,今日用APR编写了一个生产/消费模型的小程序。结果出现了这样一个奇怪的警告:“提领类型双关的指针将破坏强重叠规则”,让我大惑不解,特此和大家讨论一下。

我用的是gcc 版本 4.2.3 (Ubuntu 4.2.3-2ubuntu7) 线程模型:posix。出现警告的这段是这样的:

虽然可以运行无误,但该警告还是让我比较无奈,最后我改成了如下:

因为很久没有写C,在这里,我的问题是:

  1. 什么叫做“提领类型双关的指针”?
  2. 什么是“强重叠规则”?
  3. 为什么会破坏?
  4. 破坏之后会引发什么问题?

希望有C/C++达人能解决我这些疑问,谢谢。

附源代码:main.c

“提领类型双关的指针将破坏强重叠规则”的6个回复

  1. “提领”是一个词,“类型双关”是一个词。英文原文是dereferencing type-punned pointer will break strict-aliasing rules。
    “强重叠规则”是C99的一个专有名词(这句话里出现的基本上都是专有词或术语),指C99 aliasing rules。
    这里有一个比较详细的解释:http://lists.freebsd.org/pipermail/freebsd-current/2003-July/007561.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注