Tag: 结构

易失性结构语义

将结构typesvariables的实例声明为volatile(如果它的字段在可重入代码中访问),还是必须声明结构的特定字段为volatile? 换句话说,在以下两者之间的语义差异(如果有的话)是什么? typdef struct { uint8_t bar; } foo_t; volatile foo_t foo_inst; 和 typedef struct{ volatile uint8_t bar; } foo_t; foo_t foo_inst; 我认识到将一个指针型variables声明为volatile(例如volatile uint8_t * foo)只是告诉编译器foo指向的地址可能会改变,而不会声明foo指向的值。 我不清楚类比是否适用于结构型variables。

struct X typedef和typedef struct X是什么意思?

我在现有的代码库中有以下(工作)代码,用于在C和C ++之间共享的包含文件,在MSVC(2010)和Windows DDK上编译: struct X { USHORT x; } typedef X, *PX; 和: enum MY_ENUM { enum_item_1, enum_item_2 } typedef MY_ENUM; 据我所知,正确的定义应该是这样的: typedef struct { USHORT x; } X, *PX; 下面的表格有什么用处吗? 我错过了什么吗?

什么时候在Ruby中使用Struct而不是Hash?

我没有太多的编程经验。 但是,对我来说,Struct看起来有些类似于Hash。 Struct可以做什么? 有没有什么结构可以做,哈希不能做? 用Googlesearch后,Struct的概念在C中很重要,但我对C的了解不多。

返回两个值,Tuple vs'out'和'struct'

考虑一个返回两个值的函数。 我们可以写: // Using out: string MyFunction(string input, out int count) // Using Tuple class: Tuple<string, int> MyFunction(string input) // Using struct: MyStruct MyFunction(string input) 哪一个是最佳实践,为什么?

什么“请求会员”*******“不是结构或联盟”是什么意思?

这个错误的含义是否有一个简单的解释? request for member '*******' in something not a structure or union 在我学习C的时候,我曾经遇到过好几次,但是我还没有弄明白它的意思。

如何用匿名结构/联合来编译C代码?

我可以在c ++ / g ++中做到这一点: struct vec3 { union { struct { float x, y, z; }; float xyz[3]; }; }; 然后, vec3 v; assert(&v.xyz[0] == &v.x); assert(&v.xyz[1] == &v.y); assert(&v.xyz[2] == &v.z); 将工作。 如何使用gcc在c中执行此操作? 我有 typedef struct { union { struct { float x, y, z; }; float xyz[3]; }; } Vector3; 但是我特别是遇到了错误 line […]

如何将结构转换为C#中的字节数组?

如何将结构转换为C#中的字节数组? 我已经定义了这样一个结构: public struct CIFSPacket { public uint protocolIdentifier; //The value must be "0xFF+'SMB'". public byte command; public byte errorClass; public byte reserved; public ushort error; public byte flags; //Here there are 14 bytes of data which is used differently among different dialects. //I do want the flags2. However, so I'll try parsing them. public […]

为什么使用struct的第一个元素的地址,而不是结构本身?

在工作中,我刚刚遇到另一个代码库,开发人员在复制/比较/设置时始终使用结构的第一个元素的地址,而不是结构本身。 这是一个简单的例子。 首先有一个结构types: typedef struct { int a; int b; } foo_t; 然后有一个函数可以创build这样一个结构体的副本: void bar(foo_t *inp) { foo_t l; … memcpy(&l.a, &inp->a, sizeof(foo_t)); … } 我不会以这种方式给memcpy写一个调用,我开始怀疑原来的开发人员根本不明白C中的指针和结构。然而,现在我已经看到了两个不相关的代码库,没有普通的开发者,所以我开始怀疑自己。 为什么要使用这种风格?

结构体实现接口是否安全?

我似乎还记得阅读关于结构如何通过C#实现CLR中的接口是不好的,但我似乎无法find任何有关它的信息。 这不好吗? 这样做是否有意想不到的后果? public interface Foo { Bar GetBar(); } public struct Fubar : Foo { public Bar GetBar() { return new Bar(); } }

在C中扩展结构

我最近遇到了一个像这样的同事代码: typedef struct A { int x; }A; typedef struct B { A a; int d; }B; void fn(){ B *b; ((A*)b)->x = 10; } 他的解释是,由于struct A是struct B的第一个成员,因此b->x将与b->ax相同,并提供更好的可读性。 这是有道理的,但这是否被认为是良好的做法? 这将跨平台工作吗? 目前这在GCC上运行良好。