错误是什么意思:..."bytes to alignment boundary" 在 Xcode/Clang 中?
What means the error : ..."bytes to alignment boundary" in Xcode/Clang?
TransformNode with 4 bytes to alignment boundary
这是导致此警告的代码:
class TransformNode : public Node {
public:
int number;
public:
void test() { number = 12; }
};
//Node.h
class Node {
public:
typedef std::set<Node *> ChildSet;
protected:
ChildSet mChildren;
Node * mParent;
public:
Node(Node * parent=0) : mParent(parent) {}
~Node() {}
Node * addChild(Node * node);
inline Node * getParent() { return mParent; }
const ChildSet &getChildren() const { return mChildren; }
};
inline void node_test() {
TransformNode * node = new TransformNode;
node->test();
std::cout << node->number << "n";
}
int main() {
node_test();
return 0;
}
当我从类 TransformNode 派生 Node 类时会发生错误。我正在使用 xcode 5.0,所有警告都打开并将警告视为错误。我真的很想了解这段代码是怎么回事,所以只是关闭警告或停止将它们视为错误并不是我想要处理这个问题的方式。
编辑:添加了更多代码。澄清一些细节(粗体(
谢谢
加西姆
我不确定您所看到的是否真的是一个错误。 一般来说,"所有警告"包括各种几乎不被视为警告的东西;哎呀,在大多数情况下,它们甚至也不是超级信息量。
对齐是一个您可能不关心的问题,除非您使用非常特定的硬件,例如在嵌入式系统中。 可能正在发生的事情是,编译器默认为 8 字节对齐,当您定义 TransformNode
类时,您将为int
分配 4 个字节,并"浪费"另外 4 个字节以将整个类对齐到 8 字节边界。 编译器警告告诉您有关"浪费"的 4 个字节的信息。 正如我所说,你可能不关心这个。
我认为一般来说,如果你打开了最大警告和警告作为错误,你只会让自己发疯。 如果您真的想要超级干净,则退后一级警告然后视为错误可能更有用。
重新编辑:根据最近的编辑澄清了答案。
另一个想法:尝试在TransformNode
类中添加另一个int
,看看警告是否会消失(我假设它会消失,因为 #2 int
会"用完"浪费"的 4 个字节(。
您还可以查看 http://en.wikipedia.org/wiki/Data_padding 以更好地了解问题。
您启用了什么警告选项来获取此特定警告?我只看到两种可能性。
- -一切
不要指定此选项。此选项仅供内部 Clang 使用。请参阅程序员姐妹站点 https://softwareengineering.stackexchange.com/questions/122608/clang-warning-flags-for-objective-c-development 上此问题的第一个答案。 - -软垫
如果你特别要求被警告填充,你为什么要问这个问题?
不要打开每个可能的警告标志。你最终会得到很多误报,所有这些噪音都会让你错过真正的警告。打开具有高信噪比的警告选项,然后注意发出的每个警告。
- macOS 是内置在 clang 编译器中还是内置于 xcode ide 中?
- 如何为不同的分支使用不同的 Xcode 版本(或具有不同 Clang 版本的最新 Xcode)?
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- Xcode/Clang magic numbers?
- 将Xcode clang++安装到OSX 10.8.5中的/usr/bin中
- 如何让 clang-3.1 出现在 XCode 的编译器列表中
- XCode & Clang 不承认我的一类,尽管有适当的包含
- 未能执行/Applications/Xcode.app/Contents/Developer/usr/bin/clang
- 当设置-fno-elide构造函数时,clang Xcode 4.4.1是否有错误
- Clang++Xcode 4.4非静态成员初始化和移动构造函数
- Xcode 和 Clang 神秘地包含我没有指定的标头
- Xcode clang编译器中的unsigned long-long意外行为
- clang++ 3.1,但在Lion Xcode 4.3.3上没有“cxx_lambdas”
- 错误是什么意思:..."bytes to alignment boundary" 在 Xcode/Clang 中?
- 同一段代码,可以用 xcode 或使用 g++ 编译,在终端中编译 clang++,不能使用 gcc 或 clang 编
- 如何在xcode 4中定义g++或clang++
- clang:错误:无法在 Xcode 4.6.3 中同时指定'-fobjc-arc'和'-fobjc-gc'
- El Capitan领导下的Xcode中的clang omp
- 在XCode/Clang中使用std::shared_ptr实例化std::map出错
- 阻止Apple clang在标准include路径中添加Xcode路径