본문 바로가기

Developement/C/C++

gcc/MinGW 6.x 부터 생긴 경고, misleading indentation

 gcc 5 버젼 부터 개발을 해 오던 librawprocessor 에서 눈치를 못 채고 있던 컴파일 경고가 뜨기 시작 한걸 이번에 알았습니다. 아직 major release 가 이루어 지지 않았기 때문에 신경을 덜 쓴 것도 있긴 합니다만, 갑자기 이 오류가 눈에 띈 것은 누군가의 계시인건지 ...

 이 오류는 gcc 6 버젼 부터 강화된 여러 조건별 비교문에 따른 것으로 아래처럼 코드가 되어 있는 경우 발생 합니다.


 이 오류는 GNU gcc 6 가이드 웹 페이지를 보면 나오는데,

 아래 처럼 복합적인 비교문으로 포인터와 숫자로 넘어오는 값을 함께 비교 할 때에는 브레이스 {} 로 묶어 주어야 합니다. 그래서 아래처럼 코드를 변경 하면 해당 경고를 보지 않을 수 있습니다.

명백히는 넘어오는 src 의 포인터가 NULL 인지 아닌지만을 검사 하는 것인데, 보통 오류가 생기는 경우는 NULL 이 아닌 경우가 더 많을 수 있으나, gcc 6 부터는 좀 더 명백한 처리를 위해 이렇게 변경 된 것으로 '대충' 이해 해 보기로 했습니다.

 혹시 if 가 does not guard ... 어쩌니 하며 warning 이 뜨시는 분들은 if 문 안에 NULL 검사를 숫자 0 과 함께 동일시 하고 있는 것은 아닌지, 또는 return 이 브레이스 {} 로 묶지 않았는가 정도 확인 해 보시기 바랍니다.