구조체 사용중 초기화에 대해
글쓴이: iam502 / 작성시간: 수, 2007/12/12 - 10:47오전
typedef struct
{
char a;
char b;
} TEST_T;
void function_a()
{
//구조체 변수
TEST_T st;
st = (TEST_T){1,1};
}
+++++++
구조체 멤버에 값을 대입하는 경우 보통은 아래와 같이 설정하겠지만,
st.a = 1;
st.b = 1;
위의 function_a()에서와 같이
사용중에도 구조체에 값을 저런식으로 대입하는 경우
gcc로는 컴파일이 되지만,
VS2003에서는 컴파일 에러가 나는데 이유가 뭘까요?
그리고 해결 방법은 없을까요?
Forums:
음...
gcc 에서 제공하는 확장 문법으로 보입니다.
VS2003 에서는 지원하지 않죠...
해결 방법은 없어 보입니다.
drawline((struct
drawline((struct point){.x=1, .y=1}, (struct point){.x=3, .y=4});
엄연한 표준 문법으로 C99에 새로 도입된 compound literal입니다. VS2003은 아직 도입하지 않은 듯 하군요. 다음 글의 복합상수 부분을 참고하십시오.
http://www.zdnet.co.kr/builder/dev/c/0,39030803,39131659,00.htm
초기화가 아니기 때문이겠죠
이건 초기화가 아니라 대입문이라서 그런 것 같네요.
TEST_T st = {1, 1};
이렇게 하면 에러가 안 나야겠지만... VS2003에서 에러가 난다고 하셨죠?
초기화값 1을 숫자 대신 문자 형태로 쓸 수 밖에 없을 것 같네요...
즉, 따옴표로
즉, 따옴표로 둘러싸면 되겠군요.
--------------------------
snowall의 블로그입니다.
http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
char * 형이 아니라
char * 형이 아니라 char형이기 때문에 "문자열"은 대입할 수가 없고, 'a'나 숫자가 들어가야 합니다.
'1' 대신 1을 써서 문제가 생기는건 아닙니다.
그렇다면
제 생각에도 문자형도 되고 숫자도 되어야 할 것 같은데
일전에 {1, 1}을 초기화값으로 쓰는게 VS2003에서는 안된다고 한 글을 보았거든요.
그렇다면 암만 생각해도 VS2003의 버그 같은데... 역시 {'a', 'a'} 이렇게 쓸 수 밖에 없는 것이겠죠?
#include "stdafx.h"#include
VS2003은 없고 VS2008은 있는데 보다시피 잘 됩니다.
이 코드로 VC6,7,8에서
이 코드로 VC6,7,8에서 모두 잘되었습니다.
문자가 아닌 숫자를
문자가 아닌 숫자를 대입해서 문제인 게 아니라,
Microsoft C가 복합상수를 지원하지 않아서 문제인 겁니다.
It's High Noon...
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
익명 사용자님께서는
익명 사용자님께서는 복합상수 대입이 아닌 초기화를 시험하셨군요 -_-
제 Visual Studio 2008 (Beta 2 한글판)으로 실험해보았습니다.
1>c:\users\cppig1995\documents\visual studio 2008\projects\sandbox\sandbox.cpp(6) : error C2059: syntax error : '{'
1>c:\users\cppig1995\documents\visual studio 2008\projects\sandbox\sandbox.cpp(6) : error C2143: syntax error : missing ';' before '{'
1>c:\users\cppig1995\documents\visual studio 2008\projects\sandbox\sandbox.cpp(6) : error C2143: syntax error : missing ';' before '}'
이런 오류들이 나네요. 아무래도 저것과 효과가 똑같은
1. st2를 초기화하면서 값을 넣는다.
2. st = st2
를 써야 할 듯 합니다. ^^
It's High Noon...
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
-_-; TEST_T st = {1,
-_-;
이 내용에 대한 답변이니 초기화를 시험헤 보는게 당연하죠.
다시 한번 위의 논의 내용을 잘 읽어보세요.
compound literal이 VS2003에서 된다고 한 사람은 아무도 없습니다.
댓글 달기