동일한 프로그램에서 넓은 출력 스트림과 좁은 출력 스트림 혼합
"C Cookbook"에서는 cout과 wcout을 혼합한다고 언급되어 있습니다. 같은 프로그램은 하면 안 된다. 이 의견은 C 및 C 표준에 따라 스트림에 방향이 있다는 사실에서 비롯되었으며, 이 방향이 스트림에 설정된 후에는 방향과 호환되지 않는 작업을 혼합해서는 안 됩니다.
무엇 이것이 실제로는 무슨 뜻인가요?
cout이나 wcout이 처음 호출되면 stdout의 방향이 설정됩니다. cout의 경우 stdout은 바이트 지향 스트림이 되고, wcout의 경우 stdout은 와이드 지향 스트림이 됩니다. C 표준 [27.4.1] 및 C 표준 [7.19.2]에 따라 스트림 방향이 설정되면 해당 스트림 방향과 호환되지 않는 함수를 호출하면 안 됩니다.
규칙 예외
그러나 모든 컴파일러가 이 표준을 엄격하게 따르는 것은 아니라는 점에 유의하는 것이 중요합니다. 예를 들어 Visual C 10.0에서는 스트림 방향을 설정하는 데 사용되는 fwide 함수가 구현되지 않습니다. 따라서 Visual C에서는 cout과 wcout의 혼합이 허용된다.
마찬가지로 GCC 초기 버전에서는 버그 수정으로 인해 std를 호출하여 동일한 프로그램 내에서 cout과 wcout을 호출할 수 있었다. ::ios::sync_with_stdio(false);
그러나 이는 규칙의 예외라는 점을 명심하는 것이 중요합니다. 일반적으로 동일한 프로그램에서 넓은 출력 스트림과 좁은 출력 스트림을 혼합하는 것은 권장되지 않습니다. 이렇게 하면 예기치 않은 동작이나 정의되지 않은 결과가 발생할 수 있습니다.
위 내용은 동일한 C 프로그램에서 cout과 wcout을 혼합하는 것을 피해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!