GCC가 ANSI 및 Pedantic 플래그에서도 C ++에서 Round ()를 사용하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1882689

  •  19-09-2019
  •  | 
  •  

문제

이 프로그램이 GCC에 따라 컴파일하는 이유가 있습니까? -ansi 그리고 -pedantic 깃발?

#include <cmath>

int main (int argc, char *argv [])
{
     double x = 0.5;

     return static_cast<int>(round(x));
}

이것은 깨끗하게 컴파일합니다 (심지어 경고 없음) g++ -ansi -pedantic -Wall test.cpp -o test.

두 가지 문제가 있습니다.

  1. round() ISO 정보 모드에서 C ++에서 사용할 수 있어서는 안됩니다 (C99에서 나온 이후)
  2. 설사 round() 이 경우에만 사용할 수 있었으며 std 네임 스페이스

내가 잘못?

도움이 되었습니까?

해결책

이것은 버그입니다. 놀랍게도 오랫동안 주변에있었습니다. 분명히, 그것을 고치려는 집단적 욕구는 충분하지 않았다. 모퉁이에 C ++의 새로운 버전이 Math.h의 C99 기능을 채택 할 수있게되면 수정되지 않은 것 같습니다.

다른 팁

여기에 기본이 될 수 있지만 GCC의 -ANSI 플래그는 코드 구성에 적용되지 않습니다 (예 : GCC 비활성화 언어 확장) 모든 라이브러리를 엄격한 ANSI 호환 모드로 전환하는 대신?

표준은 정의되어야하는 기호와 그들이 어떤 헤더에 정의되는지를 지정한다고 생각합니다. 나는 다른 기호가 정의 될 수 없다고 표준에 대해서는 믿지 않는다. 요점에 더, std::round() 호출 된 자유 기호로 정의되지 않습니다 round() 정의 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top