c++ - 错误 : . 是什么意思。 Xcode/Clang 中的 ."bytes to alignment boundary"?

标签 c++ xcode warnings

具有 4 个字节到对齐边界的 TransformNode

这是导致此警告的代码:

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 并打开所有警告并将警告视为错误。我真的很想了解这段代码发生了什么,所以只是关闭警告或停止将它们视为错误并不是我想要的处理方式。

编辑:添加了更多代码。澄清一些细节(粗体)

谢谢,
加西姆

最佳答案

我不确定您看到的是否真的是一个错误。通常,“所有警告”包括几乎不被视为警告的各种内容;哎呀,在大多数情况下,它们甚至都不是 super 有用的信息。

对齐是一个您可能不关心的问题,除非您使用的是非常特殊的硬件,例如在嵌入式系统中。可能发生的情况是您的编译器默认为 8 字节对齐,并且当您定义 TransformNode 类时,您正在为 int 分配 4 个字节并“浪费”4更多字节以将整个类对齐到 8 字节边界。编译器警告告诉您“浪费”了 4 个字节。正如我所说,您可能不关心这个。

我认为一般来说,如果您打开了最大警告和错误警告,您只会把自己逼疯。如果您真的想要 super 干净,则退后一级警告然后将其视为错误可能更有用。

重新编辑:根据最近的编辑澄清了答案。

另一个想法:尝试在您的 TransformNode 类中添加另一个 int 并查看警告是否消失(我假设它会因为 int #2 将“用完”“浪费”的 4 个字节)。

您还可以查看 http://en.wikipedia.org/wiki/Data_padding更好地理解这个问题。

关于c++ - 错误 : . 是什么意思。 Xcode/Clang 中的 ."bytes to alignment boundary"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210080/

相关文章:

c++ - boost ,matrix_proxy,常量矩阵

ios - UITabBar - 更新 alpha 值并渲染它? ( swift )

ios - 使用 Core 图像过滤时内存泄漏

javascript - react - 警告 : An update was scheduled from inside an update function

c++ - 在 C++ 代码中将 size_t 变量与 -1(最大大小值)进行比较

c++ - vector<Point> myArr 的深拷贝

c++ - 复杂模型 : no solution

c - GCC、函数和指针参数、警告行为

C++ MFC CComboBox 为空

ios - Xcode 6.01 存档验证错误 : Invalid Segment Alignment