업데이트 -이 답변은 나와 다른 사람들에게 의미가있는 것처럼 보이지만 크게 틀린 것으로 나타났습니다 (의도에 관해서는 충분히 잘못되었습니다). (AProgrammer에 의해 코멘트와 같이 뾰족한 아웃) 때문에 그건 하지 같은 문자가 기본 문자 세트에 일반적으로 표현 될 수있을 때 문자열 상수의 UCS의 외부 사용이 허용. 예를 들어 키워드를 이스케이프 처리하는 데 사용하지 마십시오. 23skiddo
이스케이프를 피하여 '식별자'를 만드는 데 사용하지 않습니다 .2
. 그것은 여전히 외부 언어와 호환되는 이름을 만드는 데 사용될 수 있지만, 그 이름은 문자 또는 확장 문자로 시작하고 문자, 숫자, 밑줄 및 확장 문자 만 포함 할 때만 보입니다. 그 의도를 제대로지지하기에는 너무 제한적인 것 같습니다. 따라서 주요 의도는 (AProgrammer의 답변에서와 같이) 식별자에 이러한 추가 문자를 허용하고 이러한 문자가 그래픽으로 표시되는 소스 편집기를 활성화하는 동시에 소스 파일이 일반 ASCII로 유지되도록하는 것이어야합니다.
C ++ 프로그램은 다른 언어로 작성된 함수를 호출 할 수 있습니다. 표준화위원회에서 C ++이 다른 언어와 상호 운용 가능하도록 보장하는 것이 좋습니다. 이러한 언어는 아직 존재하지 않더라도 영숫자가 아닌 함수 이름에 유니 코드 문자를 사용할 수 있습니다. 표준에서는 링커 수준 등에서 이것이 작동하는 방식을 지정할 필요가 없습니다. 그러나이를 허용하기 위해 지정된 메커니즘을 갖추는 것이 좋습니다.
이를 위해 미래를 들여다 볼 필요는 없습니다. 호출 된 catch
(또는 보호되거나 변경 가능한) 함수가있는 오래된 C 라이브러리가 있다고 가정 하고 C ++에서 호출하려고합니다. 그리고 어떤 이유로 든 C 코드를 수정할 수 없거나 수정하고 싶지 않습니다 (그런데 C ++ 키워드가 된 함수 이름을 사용하는 오래된 C 코드를 두 번 이상 처리해야했습니다 ...)
UC 이름으로 헤더에 이것을 작성한 다음 'catch_func ()'를 호출하면됩니다.
extern "C" {
int catc\u0068( int a, int b ); // C 'catch()' function
}
inline int catch_func( int a, int b ) { return catc\u0068(a,b); }
그것은 추악하지만 헤더의 한 위치에만 있기 때문에 중요하지 않습니다. 동일한 접근 방식을 사용하여 다른 언어로 함수를 호출하는 스텁을 만들 수 있으며, 이름이 C ++ 키워드 또는 유니 코드이거나 공백 .
또는 기타 문장 부호가 포함 된 경우에도 작동합니다.
다른 여러 언어에는 일반적인 패턴을 따르지 않는 식별자를 만들 수있는 장치가 있습니다. 에서 Verilog를 들면, \abcd
행 식별자 동등 abcd
하지만, \while
및 \23skidoo
와 \44.e2
같은 볼 수 슬래시 프리픽스 필요도 식별자이다. Verilog가 사용되는 방식으로 인해 외부 인터페이스와 관련된 이름을 허용하는 것이 중요합니다.