2017-03-23 4 views
1

Stroustrup의 "std_lib_facilities.h"헤더 파일 (여기에 : http://stroustrup.com/Programming/PPP2code/std_lib_facilities.h)을 macOS Sierra, Sublime Text 3에서 올바르게 컴파일하려고합니다. 빌드 시스템을 통해), Apple LLVM 버전 8.0.0 (clang-800.0.38). 나는 여러 가지 설정을하고 있지만 두 가지 경고를 피할 수 없었습니다. 처음에는 "안녕하세요, 세상!" 프로그램을 컴파일하고 실행한다 : 문제의 라인의 일부문자열 구조체 - 경고 : 부호없는 표현의 비교

std_lib_facilities.h:107:8: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare] 
       if (i<0||size()<=i) throw Range_error(i); 
        ~^~ 
std_lib_facilities.h:113:8: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare] 
       if (i<0||size()<=i) throw Range_error(i); 
        ~^~ 

: 내 컴파일러는 C를 인식하는 것 같지 않았어요 후

// trivially range-checked string (no iterator checking): 
struct String : std::string { 
    using size_type = std::string::size_type; 
// using string::string; 

    char& operator[](unsigned int i) // rather than return at(i); 
    { 
     if (i<0||size()<=i) throw Range_error(i); 
     return std::string::operator[](i); 
    } 

    const char& operator[](unsigned int i) const 
    { 
     if (i<0||size()<=i) throw Range_error(i); 
     return std::string::operator[](i); 
    } 
}; 

내 C는 설정이 Can't build C++ program using Sublime Text 2에서 복사 숭고한 텍스트에 대한 파일 ++ 빌드 ++ 11 How do I update my compiler to use C++11 features?에 설명 된대로 : 그 누구도 날이 경고가 발생하는 이유를 이해하고 일을 해결할 수 있다면

{ 
    "cmd": ["g++", "-Wall", "-Wextra", "-pedantic", "-std=c++11", "${file}", "-o", "${file_path}/${file_base_name}"], 
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", 
    "working_dir": "${file_path}", 
    "selector": "source.c, source.c++", 

    "variants": 
    [ 
     { 
      "name": "Run", 
      "cmd": ["bash", "-c", "g++ -Wall -Wextra -pedantic -std=c++11 '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"] 
     } 
    ] 
} 

내가 그것을 감사하겠습니다 여자 이름.

+1

그것이 부정적하는 * 부호없는 * 값 불가능을 의미하고, 같은 식의 부분이 항상 * 거짓 *가 될 것입니다있다. – WhozCraig

+0

맞아요, 그 말이 맞습니다. Stroustrup이 그런 중복성을 쓰지 않을 것이라고 생각했기 때문에 제 컴파일러 나 다른 도구의 설정에 문제가 있습니다. – wander

답변

2

나는 i<0|| 부분을 제거하고 계속 진행할 것입니다.

예, C++의 아버지도 인간입니다 :)

+0

감사합니다. 그렇다고해서 내 컴파일러, C++ 버전 등의 설정에 문제가있는 것은 아닙니까? – wander

+0

@wander, 조합입니다. 이러한 경고를 무시하도록 컴파일러 설정을 조정할 수 있습니다. –

+0

@wander 아니요, 컴파일러가 좋은 경고를 생성하고 있습니다. 그 경고를 끄는 것은 가능하지만, 경고는 좋은 것이므로 원하지 않습니다. – Yakk