문자열 리터럴에서 'char*'로의 변환이 C에서는 유효하지 않지만 C에서는 유효한 이유
C의 더 엄격한 유형 시스템은 문자열 리터럴을 참조하기 위해 const char 포인터를 사용하여 정의되지 않은 동작으로 이어질 수 있는 수정을 방지합니다. 이는 문자열 리터럴에서 'char'로의 변환이 암시적으로 허용되는 C에는 없습니다.
이 불일치를 해결하기 위해 C 11에서는 더 이상 사용되지 않는 암시적 변환을 제거하고 다음 코드를 렌더링했습니다.
char* p = "abc";
잘못되었습니다. 그러나 명시적 캐스트는 호환성을 유지합니다.
char* p = (char*)"abc";
캐스트는 기본 동작을 우회하지 않습니다. 변환이 수행되도록 허용하지만 리터럴 수정으로 인한 정의되지 않은 결과를 방지하지는 않습니다.
C에서는 레거시 코드 호환성을 위해 이 변환의 유효성이 유지됩니다. 광범위한 기존 코드가 이 암시적 변환에 의존하므로 표준 위원회가 사전 경고 없이 이 기능을 중단하는 것은 비현실적입니다.
따라서 C는 유형 안전성을 보장하기 위해 암시적 변환을 금지하지만 C는 보급으로 인해 이를 허용합니다. 코드베이스 종속성. 그러나 잠재적인 문제를 피하기 위해 두 언어 모두에서 문자열 리터럴에 char const*를 사용하는 것이 좋습니다.
위 내용은 문자열 리터럴을 `char*`로 변환하는 것이 C에서는 유효하지 않지만 C에서는 유효한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!