본문 바로가기
C++ 200제/코딩 IT 정보

Qt Creator, class' will be initialized after [-Wreorder] variable

by vicddory 2017. 2. 19.

[Qt Creator 경고 강좌] class' will be initialized after [-Wreorder] variable


경고 메세지 

  • 'class' will be initialized after [-Wreorder] variable


C++에서도 전역, 멤버 등의 변수를 사용자가 실수로 놓칠까 봐, 또는 미묘한, 확인하기 힘든(subtle) 에러가 발생할 소지를 줄이기 위해 초기화 코드와 리스트에 차이가 발생하면 경고를 띄웠었습니다.


그런 이유로 아래 코드를 빌드하면 아래 아래처럼 경고가 뜹니다.



qt creator 경고 강좌'class' will be initialized after [-Wreorder] variable - 유발



qt creator class 경고'class' will be initialized after [-Wreorder] variable



변수 초기화 순서가 원인입니다.




3번째에 초기화될 것은 double형 변수 d지만, 실제론 int형 i가 초기화 돼버려 경고가 뜹니다.



qt creator wreorder will 경고 강좌'class' will be initialized after [-Wreorder] variable 경고 상태



  • 초기화 리스트에는 : i -> f -> d -> b의 순입니다.
  • 실제 구현 코드에선 : f -> d -> i -> b의 순입니다.


저런 경고를 띄울 거면 초기화 리스트 순서와 코드가 전혀 다른 셈이니 4곳 모두에 경고를 띄워야 되는 거 아닌지 생각이 드네요.


컴파일러 입장에선 초기화 리스트와 초기화 코드의 순서가 똑같으면 좋겠으나, 소스가 늘어나고 다뤄야 할 비즈니스 로직이 고도화될 수록 저런 순서를 맞춰 초기화하는 게 좀 귀찮습니다.




ps1. Qt에서는 저 경고를 없애려면 .pro 파일에 아래 코드 한 줄만 넣어주면 됩니다.


1
QMAKE_CXXFLAGS_WARN_ON += -Wno-reorder
cs



ps2. 소멸자와도 연관이 있을 거 같긴 한데 더는 모르겠음.....


[Qt Creator 경고 강좌] class' will be initialized after [-Wreorder] variable

댓글