GNEX 코딩을 하다보면 함수 인자로 구조체 타입을 사용하지 못하여 답답한 경우가 많은데 편법을 사용하여 할수 있더군요...
더욱 희한한 것은, 다음과 같이 해도 된다는 겁니다.
[시작]========================================
#include "..\sscript.h"
struct TOnePoint
{
int temp;
int x, y;
int p;
};
struct TPoint
{
int dummy[3]; // 일부러 넣어봤음.
int *p;
int x, y;
};
struct TAnotherPoint
{
int x, y;
int p;
}
void InitPoint(int *a_ppt, int a_x, int a_y)
{
a_ppt->x = a_x;
a_ppt->y = a_y;
a_ppt->p = &(*a_ppt).y;
}
void main()
{
struct TPoint pt;
string msg;
InitPoint(&pt, 4, 5);
MakeStr3(msg, "x = %d, y = %d, *p = %d", pt.x, pt.y, *(pt.p));
ClearWhite();
DrawText(1, 1, msg);
Flush();
}
[끝]==========================================
즉, 제 원글처럼 굳이 TPoint type의 local variable을 선언하지 않고, int* type 인자를 그냥 TPoint type처럼 쓸 수 있다는 것이지요. 혹시나 해서 x, y, p라는 이름의 member를 struct 내의 다른 offset에 가지는 struct들을 앞뒤로 선언해서 헷갈리게 해 봤는데도 화면에는 정확히 4, 5, 5가 나오는군요.
이대로라면 (문법이 좀 깨기는 하지만) Mobile C에서 struct(의 pointer)를 함수의 인자로 쓸 수 있다고 봐도 되지 않을까요?
만일 문법이 찜찜하다면... 다음과 같이 깔끔하게 하는 수도 있군요.^^
[시작]========================================
struct TPoint
{
int dummy[3]; // 일부러 넣어봤음.
int *p;
int x, y;
};
#define PPointArg int*
void InitPoint(PPointArg a_ppt, int a_x, int a_y)
{
a_ppt->x = a_x;
a_ppt->y = a_y;
a_ppt->p = &(*a_ppt).y;
}
[끝]====================================
그러니까, 모든 P...Arg type은 int* 로 #define해 놓으면 된다는 것.
이렇게 하면 최소한 다른 C 환경으로 이식하기가 쉬워지겠지요.