通过"直接" struct作为C中的函数

时间:2013-03-19 18:39:54

标签: c function structure

我对C中的结构有一个简单的问题。

我有这个结构和这个功能:

struct Vec2
{
  int x;
  int y;
}

void draw(Sprite* sprite, struct Vec2 pos);

无论如何在c ++中使用等效语言吗?

draw(foo, new Vec2(10, 20));

我试过了,但编译器不同意我的说法:

draw(foo, {10, 20} );

有人帮忙吗?

编辑:我在C ++模式下使用Visual C ++ 2008 Express,但对于我的学校,我必须使用C语言编写,而不是C ++

3 个答案:

答案 0 :(得分:5)

如果您的编译器支持C99或更高版本,您可以使用复合文字

draw(foo, (struct Vec2){10, 20});

或者,如果您想更明确地了解成员名称:

draw(foo, (struct Vec2){.x = 10, .y = 20});

(请注意,Microsoft的C编译器不支持C99,这可能会限制代码的可移植性。)

答案 1 :(得分:2)

我通常做的是:

struct Vec2 make_Vec2( int x, int y ) {
  struct Vec2 vec;
  vec.x = x; vec.y = y;
  return vec;
}

...
draw( foo, make_Vec2( 10, 20 ) );

答案 2 :(得分:1)

只需添加@Keith Thompson答案的工作示例:

#include <stdio.h>
#include<string.h>
struct two{
 int x;
 int y;
};
draw(struct two t){
    printf("\nx=%d y=%d\n", t.x, t.y);
}
int main(){
 draw((struct two){1,2});
 draw((struct two){.y = 1, .x = 2});
} 

输出:

:~$ ./a.out 

 x=1 y=2

 x=2 y=1