我想知道是否有人可以向我解释#pragma pack预处理器语句的作用,更重要的是,为什么人们会想要使用它.
我查看了MSDN页面,它提供了一些见解,但我希望能从有经验的人那里听到更多.我以前在代码中看过它,虽然我似乎无法找到它的位置.
我的结构是这样的
typedef struct {
type1 thing;
type2 thing2;
...
typeN thingN;
} my_struct Run Code Online (Sandbox Code Playgroud)
如何在循环中枚举struct childrens,例如while,或for?
假设我有一个矢量类:
typedef struct vec3_s
{
float x, y, z;
}
vec3;
Run Code Online (Sandbox Code Playgroud)
但是,我希望能够迭代它而不将其转换为浮点数组.虽然在这种情况下演员阵容是可以接受的,但我很想知道C++中的任何功能是否都可以在C语言中完成.例如,在C++中,由于std::vector< T >下标[]运算符被重载,我可以传递其地址一个函数的第一个索引void*.
即
void do_something_with_pointer_to_mem( void* mem )
{
// do stuff
}
int main( void )
{
std::vector< float > v;
// fill v with values here
// pass to do_something_with_pointer_to_mem
do_some_with_pointer_to_mem( &v[ 0 ] );
return;
}
Run Code Online (Sandbox Code Playgroud)
另一个更具体的例子是在OpenGL中使用glBufferData(...)时(使用C++时):
glBufferData( GL_ARRAY_BUFFER, sizeof( somevector ), &somevector[ 0 ], GL_STREAM_DRAW );
那么,是否有可能使用下标运算符在C中完成类似的事情?如果没有,并且我必须编写一个函数(例如float vec3_value_at( unsigned int i )),那么static inline …
是否可以使用指针迭代C结构,其中所有成员都是相同类型.这是一些不编译的示例代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int mem1 ;
int mem2 ;
int mem3 ;
int mem4 ;
} foo ;
void my_func( foo* data )
{
int i ;
int* tmp = data ; // This line is the problem
for( i = 0; i < 4; ++i )
{
++tmp ;
printf( "%d\n", *tmp ) ;
}
}
int main()
{
foo my_foo ;
//
my_foo.mem1 = 0 ;
my_foo.mem2 = 1 ;
my_foo.mem3 = 2 …Run Code Online (Sandbox Code Playgroud)