struct 변수 동기화 질문입니다.

송동섭의 이미지

struct의 변수관련 동기 방법에 관해 질문하려 합니다. 많은 도움 부탁드립니다.

typedef struct _A {
int a;
int b;
int c;
} A;

typedef struct _MSG {
int a;
int c;
} MSG;

struct A def_A;
struct MSG def_MSG;

def_A.a = 0;
def_A.b = 1;
def_A.c = 2;
def_MSG.a <= 멤버 변수 a가 def_A.a의 값이 동기적으로 같게 하길원합니다.

위와 같은 상황에서 struct A의 변수 a, c를 이용하는 sturct MSG를 구성하고 싶습니다. 즉, def_A.a = 0을 넣었을 경우 struct def_MSG.a 에 def_MSG.a = 0이란 코드 없이 자동적으로 동기화 하는 방법이 있는지가 궁금합니다. struct의 구조를 변경하는 것도 상관없구요 이러한 동기화 방법이 있는지가 궁금합니다. 부탁드립니다.
yui의 이미지

struct _A {
  int a;
  int b;
  int c;
} A;

struct _MSG {
  int* pa;
  int* pc;
} MSG;

struct A def_A;

struct MSG def_MSG;
def_MSG.pa = &def_A.a;
def_MSG.pc = &def_A.c;

좀 얍삽(^^) 한가요?

cinsk의 이미지

int a;
int b;

struct A {
  int *pa;
  int b;
  int *pc;
};

struct MSG {
  int *pa;
  int *pc;
};

struct A def_A = { &a, 1, &b };
struct MSG def_MSG = { &a, &b };
lunarainbow의 이미지

struct _A { 
int a; 
int b; 
int c; 
} A; 

struct _MSG { 
int *a; 
int c; 
} MSG; 

struct A def_A; 
struct MSG def_MSG; 

def_MSG.a = &def_A.a;

def_A.a = 0; 
def_A.b = 1; 
def_A.c = 2; 

뭐.. 이렇게 포인터로 가르켜 두는 방법밖에는 없을듯 싶습니다..;;

그런데 구조체 선언이 약간 이상한거 같은데...

struct _A { 
int a; 
int b; 
int c; 
} A;  // <- 이곳에서 이미 A라는 구조체 변수를 선언

struct A def_A;  // <- struct A 라는건 없었습니다만.. struct _A 입니다.

음. 아마 저대로는 컴파일 에러가 나지 않을까 싶습니다.

typedef struct _A{
int a; 
int b; 
int c; 
} A;

A def_A;

차라리 이렇게 사용하는것이 어떨까 싶습니다.

pebiman의 이미지



struct _MSG { 
   int a; 
   int c; 
} MSG; 

struct _A { 
   int a; 
   int b; 
   int c; 
   struct _MSG msg;
   void SetData()
   {
        msg.a = a;
   }
} A; 


이렇게 하신 후 A.setData()를 하시기만 될 듯..
다른 분들과 조금 다른 아이디어 였습니다.

쓰레기는 쓰레기통에...

송동섭의 이미지

이리 빠리 답변들.. 커 감사합니다. struct정의 관련 말씀해주신 부분은 예를 간단히 들려 하다보니 그렇게 되었습니다.(지적해주신거 수정하였습니다.^^) 답변들은 테스트 해보구 가장 편한걸루 정해야 되겠네요 많은 답변 감사합니다.

** Inside Of Inside By Forman

moonzoo의 이미지

처음 질문을 보는 순간 ..

에이~ 어떻게 서로다른 struct를 동기화 하는게 가능할수 있을까?

라고 생각했는데 ..그 밑에 주르륵 달리는 리플들..

포인터..

좋네요~

lunarainbow의 이미지

pebiman wrote:


struct _MSG { 
   int a; 
   int c; 
} MSG; 

struct _A { 
   int a; 
   int b; 
   int c; 
   struct _MSG msg;
   void SetData()
   {
        msg.a = a;
   }
} A; 


이렇게 하신 후 A.setData()를 하시기만 될 듯..
다른 분들과 조금 다른 아이디어 였습니다.

prbiman님의 생각이 무엇인지 잘 이해가 안되네요. ^^;;

설명 부탁 드립니다. ^^

그런데.. 제가 컴파일을 해본 결과 이런 에러가 나오며, 컴파일이 되지 않더군요.

gcc 버젼은 3.2입니다.

c.c:16: field `SetData' declared as a function
c.c:16: warning: no semicolon at end of struct or union
c.c:16: parse error before '{' token
c.c:19: warning: type defaults to `int' in declaration of `A'
c.c:19: warning: data definition has no type or storage class
c.c:23: warning: return type defaults to `int'
송동섭의 이미지

그러게요. 저두 혹시나 하는 맘에 하구 했는데 역시 많은 분들이 계신 kldp에서 안되는건 없는것 같습니다.

** Inside Of Inside By Forman

송동섭의 이미지

포인터를 쓸경우 동기화에서 가능하데 이를 이용하여 메세지를 구성할때 한번 손질을 해줘야 하긴 할듯 보이네요.
ㅋ 제가 넘 많은걸 바라는듯.. 전 MSG struct를 그대로 memcpy해서 메세지를 구성 전송하려 했는데..

** Inside Of Inside By Forman

pebiman의 이미지

그 코드는 gcc로는 컴파일이안됩니다.
g++로 하시면..잘 되실 겁니다.
^^;

쓰레기는 쓰레기통에...

lunarainbow의 이미지

뜨아~ 어쩐지..;;

구조체안에 함수가 있길래, C에서 저런거 지원했었던가? C++인가?

그러고 있었는데..

구조체길래 무조건 C라고만 생각했던것이 실수였네요. ^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.