오랜만에 멀티플랫폼 빌드에서 특이한 경고를 보았다.
sprintf(s, "%s:?-??(??)", mi.pattern.c_str());
위의 코드가 문제의 코드인데, 다음과 같은 경고가 나왔다.
warning: trigraph converted to '[' character [-Wtrigraphs]
sprintf(s, "%s:?-??(??)", mi.pattern.c_str());
^
warning: trigraph converted to ']' character [-Wtrigraphs]
sprintf(s, "%s:?-??(??)", mi.pattern.c_str());
^
최근에는 거의 생각치도 않던 spec인 trigraph가 여기에 적용된 것인데,
예상을 못했던 것은 따옴표 안의 문장에서도 trigraph가 적용된다는 것이었다.
??( 는 [ 로, ??) 는 ] 로 변환이 되니, 문제의
"%s:?-??(??)" 는
"%s:?-[]" 가 된다.
Posted by 안영기