All declarations of structure, union, or enumerated tyopes that have the same scope and use the same tag declare the same type, The type is [incomplete] untile the closing brace of the list defining the content, and complete thereafter.
Quote:
incomplete : An incomplete type may only by used when the size of an object of that type is not needed. It is not needed, for example, when a typedef name is declared to be a specifier for a structure or union, or when a pointer to or a function returning a structure or union is being declared. The specification has to be complete before such a function is called or defined.
라고 나오네요... 결론적으로 struct 선언하면서 typedef가 되는데 typedef라는 놈은 struct가 다 선언되야지 유효하다는 것인거 같군요.
비쥬얼 스튜디오 C++에서는 이상없이 작동하는데..
리눅스에서 gcc로 컴파일 하니까.. typedef가 정의되지
않았다는 에러가 납니다.
typedef struct list{
int data;
list *link;
};
int main(void){
list item1, item2, item3;
.......
return 0;
}
너무 초보적인 질문 같지만.. 답변 부탁 드립니다.
이 코드는 표준 C나 표준 C++ 문법으로 좀 틀린 문법입니다.
(정확히 syntax보다 semantic이 틀렸죠..)
위에서 지적했듯이 미처 정의가 끝나지 않은 구조체를 쓰려고 한 것이 잘못이지요.
그러나 Visual Studio 의 C++ compiler(CL.EXE)는 나름대로 융통성을 발휘해서 그것을 허용하는가봅니다.
아마 경고(warning) 정도는 뜨지 않았을까요..
Re: 사용자 정의 자료형 선언에 관해서..
아닐까요?
--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!
C++에서 struct는 기본 모드가 public인 class와 같다고
C++에서 struct는 기본 모드가 public인 class와 같다고 생각하시면 됩니다. (class는 기본으로 private이죠) 그래서 그냥
라고 쓰시면 됩니다. typedef는 필요없습니다.
C 에서는
이렇게 해야 list 가 타입 이름으로 선언됩니다.
Heejoon Lee
먼저 답변 정말 감사드립니다.근데... 해봤는데 안되는군요..그리
먼저 답변 정말 감사드립니다.
근데... 해봤는데 안되는군요..
그리고.. 제가 올린 코드가 제 생각에는 아무리 봐도 신텍스에러가
아닌거 같은데.. 대체 뭐가 문제인지.. VC++ 6.0에서는
컴파일이 잘되공.. 그래서.. 결국엔 윈도에서 컴파일을 했습니다..
다른 문제인거 같은데.. 아시는분 답변 부탁 드립니다.
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
흐음..이 문제는 typedef 요놈 때문에 그런것 같은데요..
typedef가 struct안에서 설정할때 안먹힙니다..
버그인지 뭔지는 잘 모르겠으나
이렇게 바꿔야 합니다.
이런식으로
왜 이런지는 잘 몰라요..typedef문이 처리 되는 순서 때문인가??-_-ㅋ
galadriel in the tower of elves
이렇게 사용하는것이 자기참조방식이라고 알고 있는데..저렇게 구조체명
이렇게 사용하는것이 자기참조방식이라고 알고 있는데..
저렇게 구조체명 따로.. 사용자 정의형 이름이 따로..
이름이 달라야 한다는게 이해가 안가네요..
제가 표현력이 좀 부족해서.. C++에서만 가능한건지..
의문이 생기는군요..
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
흐음..C99 스펙에 보면은.
6.7.2.3 Tags에 관한 내용을 보면
라고 나오네요... 결론적으로 struct 선언하면서 typedef가 되는데 typedef라는 놈은 struct가 다 선언되야지 유효하다는 것인거 같군요.
예시로 나온 코드를 보면
이런식의 예제 코드가 붙는군요.
C99스펙을 하드카피 해놨더니 써먹을 때가 있군요 8)
galadriel in the tower of elves
혹시나 하는 마음에, 일단 typedef에 대해서 설명하겠습니다.
혹시나 하는 마음에, 일단 typedef에 대해서 설명하겠습니다.
하면 A라는 타입을 B라는 타입으로 쓸 수 있는 겁니다. 이것을
에 적용하면 A는
이고 B는
입니다.
이렇게 풀어서 써도 같은 의미입니다.
이름 없는 구조체도 가능하므로
이렇게 써도 됩니다.
그리고 질문하신 코드는 구조체를 정의하면서 그 안에 자기 자신을 포함하는 경우인데요. 이 경우에는 typedef를 위에다 먼저 한 후에 써야합니다. 즉,
이렇게 정의해야합니다.
Heejoon Lee
답변 달아주신 모든 분들께 감사드립니다.해결이 되었네요.. :D
답변 달아주신 모든 분들께 감사드립니다.
해결이 되었네요.. :D
C++ 컴파일러로는 절대로 C 코딩을 하지 말아야 겠습니다.
컴퓨터가 이해할수 있는 코드는 어느 바보나 다 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 짠다 - 마틴파울러
[quote="shs0917"]답변 달아주신 모든 분들께 감사드립니다.
정확히 알면 어떤 연장을 쓰던지 목적을 달성할 수 있습니다.
마음속에 연장에 대한 쓰임새를 규정하지 마세요..
---
http://coolengineer.com
Re: 사용자 정의 자료형 선언에 관해서..
이 코드는 표준 C나 표준 C++ 문법으로 좀 틀린 문법입니다.
(정확히 syntax보다 semantic이 틀렸죠..)
위에서 지적했듯이 미처 정의가 끝나지 않은 구조체를 쓰려고 한 것이 잘못이지요.
그러나 Visual Studio 의 C++ compiler(CL.EXE)는 나름대로 융통성을 발휘해서 그것을 허용하는가봅니다.
아마 경고(warning) 정도는 뜨지 않았을까요..
댓글 달기