Tag: 结构

为什么这个结构大小3而不是2?

我已经定义了这个结构: typedef struct { char A:3; char B:3; char C:3; char D:3; char E:3; } col; sizeof(col)给我3的输出,但是不应该是2? 如果我只评论一个元素,那么sizeof是2.我不明白为什么:3位的五个元素等于15位,并且小于2个字节。 定义这样一个结构是否有“内部大小”? 我只是需要澄清,因为从我迄今为止的语言概念来看,我预计的是2字节的大小,而不是3字节。

C / C ++结构与类

完成我的C ++类之后,在我看来,结构体/类几乎是相同的,除了一些细微的差别。 我以前从来没有用C编写过; 但我知道它有结构。 在C中是否可以inheritance其他结构并设置公有/私有的修饰符? 如果你可以在常规的C中做到这一点,为什么在世界上我们需要C ++吗? 什么使类与结构不同?

自引用结构体定义?

我没有长时间写C,所以我不知道如何去做这些recursion的事情……我希望每个单元格包含另一个单元格,但是我得到了一个错误“字段”子字段的行数不完整“。 这是怎么回事? typedef struct Cell { int isParent; Cell child; } Cell; PS(Ziggy也显然被typedef弄糊涂了:他​​已经敲入Cell to Cell并且奇怪为什么?)

索引到一个结构是合法的吗?

不pipe代码是多么糟糕,并且假设alignment方式在编译器/平台上不是问题,这是不确定的还是破坏的行为? 如果我有这样的结构: struct data { int a, b, c; }; struct data thing; (&thing.a)[0] , (&thing.a)[1]和(&thing.a)[2]是否合法访问a , b和c ? 在任何情况下,在每一个编译器和平台上,我都试过了,每一个设置我都试过了。 我只是担心编译器可能没有意识到b和thing [1]是一样的东西,而存储到'b'的存储可能被放在一个寄存器中,而东西[1]从内存中读取错误的值(例如)。 在任何情况下,我都试过它做了正确的事情。 (我当然知道,这并不多) 这不是我的代码; 它是我必须使用的代码,我感兴趣的是这是不好的代码还是破坏的代码,因为不同的改变会影响到我的优先级。 标记为C和C ++。 我最感兴趣的是C ++,但是如果它不同,只是为了兴趣。

为什么结构不支持inheritance?

我知道.NET中的结构不支持inheritance,但是它不完全清楚为什么它们以这种方式受到限制。 什么技术原因阻止结构从其他结构inheritance?

如何在c中的多个文件使用的头中声明结构?

如果我有一个结构的source.c文件: struct a { int i; struct b { int j; } }; 这个结构如何在另一个文件(即func.c )中使用? 我应该创build一个新的头文件,声明在那里的结构,并在func.c包含该头func.c ? 或者我应该在头文件中定义整个结构,并将其包含在source.c和func.c ? 这两个文件中的struct如何声明为extern ? 我应该typedef它吗? 如果是这样,怎么样?

如何在Fabric文件中设置目标主机

我想使用Fabric将我的Web应用程序代码部署到开发,登台和生产服务器。 我的fabfile: def deploy_2_dev(): deploy('dev') def deploy_2_staging(): deploy('staging') def deploy_2_prod(): deploy('prod') def deploy(server): print 'env.hosts:', env.hosts env.hosts = [server] print 'env.hosts:', env.hosts 示例输出: host:folder user$ fab deploy_2_dev env.hosts: [] env.hosts: ['dev'] No hosts found. Please specify (single) host string for connection: 当我创build一个set_hosts()任务,如Fabric文档中所示,env.hosts设置正确。 然而,这不是一个可行的select,也不是一个装饰者。 在命令行上传递主机最终会导致某种调用fabfile的shell脚本,我宁愿让一个工具正确地完成这项工作。 它在Fabric文档中说“env.hosts只是一个Python列表对象”。 根据我的观察,这是不正确的。 任何人都可以解释这里发生了什么? 我如何设置主机部署到?

方便的C ++结构初始化

我试图find一个方便的方式来初始化“pod”C ++结构。 现在,考虑下面的结构: struct FooBar { int foo; float bar; }; // just to make all examples work in C and C++: typedef struct FooBar FooBar; 如果我想方便地在C(!)中初始化它,我可以简单地写: /* A */ FooBar fb = { .foo = 12, .bar = 3.4 }; // illegal C++, legal C 请注意,我想明确地避免以下表示法,因为如果我在将来更改结构中的任何内容 ,它会使我打破我的脖子: /* B */ FooBar fb = { […]

为什么结构alignment取决于字段types是基本的还是用户定义的?

在Noda Time v2中,我们正在转向纳秒级的分辨率。 这意味着我们不能再使用一个8字节的整数来表示我们感兴趣的整个时间范围。这促使我调查了Noda Time(许多)结构的内存使用情况,这又导致了我在CLR的协调决定中发现一个轻微的怪异。 首先,我意识到这是一个实现的决定,而且默认行为随时可能改变。 我意识到我可以使用[StructLayout]和[FieldOffset] 来修改它,但我宁愿想出一个解决scheme,如果可能的话,不要求这样做。 我的核心场景是,我有一个struct ,其中包含一个引用types的字段和其他两个值types的字段,其中这些字段是简单的包装int 。 我曾希望在64位CLR上表示为16个字节(参考8个,其他4个),但由于某种原因,它使用了24个字节。 我使用数组测量空间,顺便说一下 – 我了解,在不同的情况下,布局可能会有所不同,但这种感觉像是一个合理的起点。 以下是一个演示此问题的示例程序: using System; using System.Runtime.InteropServices; #pragma warning disable 0169 struct Int32Wrapper { int x; } struct TwoInt32s { int x, y; } struct TwoInt32Wrappers { Int32Wrapper x, y; } struct RefAndTwoInt32s { string text; int x, y; } struct RefAndTwoInt32Wrappers […]

如何在控制台中打印结构variables?

如何在Golang中打印(在控制台中)该结构的Id , Title , Name等? type Project struct { Id int64 `json:"project_id"` Title string `json:"title"` Name string `json:"name"` Data Data `json:"data"` Commits Commits `json:"commits"` }