相关疑难解决方法(0)

#pragma pack效果

我想知道是否有人可以向我解释#pragma pack预处理器语句的作用,更重要的是,为什么人们会想要使用它.

我查看了MSDN页面,它提供了一些见解,但我希望能从有经验的人那里听到更多.我以前在代码中看过它,虽然我似乎无法找到它的位置.

c c-preprocessor pragma-pack

212
推荐指数
4
解决办法
19万
查看次数

有没有办法在C中循环使用不同类型元素的结构?

我的结构是这样的

typedef struct {
  type1 thing;
  type2 thing2;
  ...
  typeN thingN;
} my_struct 
Run Code Online (Sandbox Code Playgroud)

如何在循环中枚举struct childrens,例如while,或for?

c struct loops

20
推荐指数
1
解决办法
3万
查看次数

用于迭代像数组一样的struct成员的C方法?

假设我有一个矢量类:

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 iteration vector subscript memory-address

5
推荐指数
2
解决办法
2万
查看次数

迭代C中相同类型的struct成员

是否可以使用指针迭代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)

c iteration struct

4
推荐指数
3
解决办法
1万
查看次数