창 최소화, 최대화 혹은 그냥 리사이징 할때마다 크래시 터져서 디버깅 돌려도 이유는 안나오고 구글링 해도 이유 안나오고
하루종일 이거 저거 쑤셔보면서 문제점 찾다가 #include 쪽에 문제 있는거 알아내고 저렇게 해결했는데
이유는 아직도 모르겠음 믿고 있던 #pragma once 에서 문제 생기니깐 허탈함
이렇게 include 하는게 정석이였던거임?????????
창 최소화, 최대화 혹은 그냥 리사이징 할때마다 크래시 터져서 디버깅 돌려도 이유는 안나오고 구글링 해도 이유 안나오고
하루종일 이거 저거 쑤셔보면서 문제점 찾다가 #include 쪽에 문제 있는거 알아내고 저렇게 해결했는데
이유는 아직도 모르겠음 믿고 있던 #pragma once 에서 문제 생기니깐 허탈함
이렇게 include 하는게 정석이였던거임?????????
pragma once는 버그 있다는 글 옛날에 본적 있긴함
https://stackoverflow.com/a/34884735/13031224
이런
내용이 잇긴 한데 댓글 링크엔 또 아니라고 하고 잘 모르겠음
근데 이런 내용의 글이 하나 더 있었던것같은데 착각인가
각 헤더마다 전처리 해놓는게 국룰이라고 생각함
include guard를 쓰려는거면
#ifndef UNIQUE_XXX
#define UNIQUE_XXX
(코드)
#endif
(eof)
식으로 작성하는게 일반적임
그리고
https://en.cppreference.com/w/cpp/language/identifiers
여기서 알 수 있듯이 double underscore는 standard library를 만들 때가 아니면 사용하지 않아야 함
그리고 당연하지만 각 헤더를 불러올 때마다 include guard를 확인할 필요는 없음. 코드를 전체적으로 봐야 문제를 알 수 있을 것 같지만, 첫 헤더에는 #pragma once 안 해준거임?
첫번째 사진은 main 쪽이라 pragma once를 안썼습니다. 코드는
https://github.com/roy6307/NebulaSurfer에
있습니다. 다만 아직도 이해 안가는건 중복 include로 오류가 발생했는데 그럼 컴파일이나 링크 타임에서 오류가 나왔어야 하는거 아닌가 싶습니다.
그리고 조언 감사합니다 include guard라고 불르는 것도 처음 알았네요 책도 없이 야매로 배워서 몰랐는데 정망 감사합니다
CMakeLists.txt에서, ALL_FILES 정의에 들어있는 ${Header_Files}를 지우면 될 것 같다는 생각이 강하게 듭니다.
진짜 정말 막막했는데 코드도 봐주시고 감사합니다... 지금은 밖이라 힘들지만 꼭 조언 해주신대로 해보겠습니다