구버전의 visual studio 에서는 정상적으로 실행될 것이나 2017년도의 버전 이상 부터 출력되는 오류라고 한다.
첫번째 해결법은 기존의 char *포인터변수를 const char *포인터변수 이렇게 앞에 const를 붙여 해결한다.
두번째 해결법은 파일 확장자를 .cpp 이 아니라 .c 로 바꿔주는 것이다. c++ 문법과 c의 문법이 아무래도 포인터와 관련해서 차이점이 있는 모양이다.
세번째 해결 방법은 다음과 같다
이렇게 준수 모드를 아니요로 설정한 후 적용을 눌러 설정을 완료하면 해결된다.
어째서 버전 업데이트로 인해 이런 오류를 출력하게 되었는가?
이전 버전은 위의 준수 모드의 설정이 '아니요' 가 기본 설정이라고 한다. 2017년 버전에서 부터 준수 모드가 '예'로 설정되었다고 하는데 준수 모드가 무엇이길래 버전이 업데이트 되면서 설정 기본값이 변동되었을까? 준수 모드는 비표준 언어 구문이 발견되면 컴파일러에서 오류, 경고를 생성한다. 즉 문법을 준수하는 모드라는 것이다.
https://docs.microsoft.com/ko-kr/cpp/build/reference/permissive-standards-conformance?view=msvc-170
이 문서에 의하면 준수 모드의 사용으로 규칙 문제를 식별하고 수정하여 정확성과 이식성을 향상 시키는것이 준수 모드의 목적임을 알 수 있다.