2013-03-02 2 views
3

클로이에 대한 -Wformat=2 옵션에 대한 웹에 수많은 언급이 있습니다. 이미 알고있는 -Wformat (XCode가 "Typecheck calls as printf/scanf"을 호출하는 경우가 있습니다.하지만 이제는 더 많은 문자열 형식 API를 다루고 있습니다.).-Wformat = 2의 기능은 무엇입니까?

  • 이것은 어떤 작업을 수행합니까?
  • 만약 그렇다면 무엇이 다를까요? -Wformat과 어떻게 다릅니 까?
  • 두 가지를 모두 사용하는 것이 유용할까요? 아니면 다른 하나의 수퍼 세트입니까?

답변

3

만약 그렇다면 어떤 경우에, 무엇을, 언제, 어디서, 그것은 -Wformat 다르게합니까?

GCC에서 빌려온 것으로, 대체품으로 사용하기에 적합합니다. GCC's description :

-Wformat = 2

-Wformat 활성화 플러스 형식 검사 -Wformat에 포함되지. 현재 은 -Wformat -Wformat-nonliteral -Wformat-security -Wformat-y2k와 동일합니다.

대부분의 질문에 대한 답변입니다.

이것은 어떤 작업을 수행합니까?

예. 다음 프로그램 -Wformat=2의 존재 (또는 부재)에 따라 다른 경고를 방출한다 :

__attribute__((__format__ (__printf__, 1, 2))) 
static void F(const char* const pString, ...) { 
} 

int main(int argc, const char* argv[]) { 
    F("", 0); 
    F(argv[0], 0); 
    const char str[] = "aaa"; 
    F(str, 0); 
    F("%i", 0); 
    F("%i"); 
    return 0; 
} 

참고 : 연타 표시는 -Wformat-Wformat-security 롤.

마지막으로, 나는 -Wformat-y2k을 테스트하지했지만, 그것은으로 GCC에 의해 정의된다

-Wformat-Y2K -Wformat 지정하면, 또한은 strftime 형식에 대해

경고하는 단지 2 자리수의 해를 산출 할 수 있습니다.

+1

'-Wformat-y2k'는 Clang에서 구현되지 않은 것으로 보입니다. 나는'% y '(세기의 세기) 변환 지정자를 사용하는 프로그램으로 시도했지만 아무런 불만이 없었다. 감사. –

+0

@PeterHosey Great - 감사합니다. – justin

관련 문제