programing

C에서 연산자는 무엇을 합니까?

prostudy 2022. 6. 22. 21:46
반응형

C에서 연산자는 무엇을 합니까?

이렇게 생긴 C의 선을 봤어요.

!ErrorHasOccured() ??!??! HandleError();

올바르게 컴파일 되어 정상적으로 동작하고 있는 것 같습니다.에러가 발생했는지 확인하고, 발생했을 경우 대처하고 있는 것 같습니다.하지만 나는 그것이 실제로 무엇을 하고 있는지 어떻게 하고 있는지 잘 모르겠다.프로그래머가 오류에 대한 감정을 표현하려는 것처럼 보입니다.

나는 본 적이 없다??!??!이전에 어떤 프로그래밍 언어에서도 문서를 찾을 수 없었습니다. (Google은 다음과 같은 검색어를 지원하지 않습니다.)??!??!)의 기능 및 코드 샘플의 동작 방법.

??!를 번역하는 3각 문자입니다.|라고 써있네요

!ErrorHasOccured() || HandleError();

이는 단락으로 인해 다음과 같습니다.

if (ErrorHasOccured())
    HandleError();

주의 Guru of the Week(C++와 거래하지만 여기서는 관련이 있음)의 Guru입니다.여기서 이걸 주웠어요.

Trigraph의 발생원일 가능성이 있거나 @DwB가 코멘트에서 지적한 것처럼 EBCDIC이 (다시) 어렵기 때문일 가능성이 높습니다.IBM developerworks board에 대한 이러한 논의는 이 이론을 뒷받침하는 것으로 보입니다.

ISO/IEC 9899:1999 § 5.2.1.1, 각주 12 (h/t @Random832)부터:

Trigraph 시퀀스를 사용하면 7비트 US ASCII 코드 세트의 하위 집합인 ISO/IEC 646에 설명된 대로 불변 코드 세트에 정의되지 않은 문자를 입력할 수 있습니다.

일반적으로 이것이 존재하는 이유는 예시와 다를 수 있습니다.

이 모든 것은 50년 전 하드카피 통신 단말기를 컴퓨터 사용자 인터페이스로 용도 변경하면서 시작되었습니다.초기 Unix 및 C 시대에는 ASR-33 Teletype이었습니다.

이 디바이스는 저속(10cps)으로 노이즈가 많고 보기 흉하며 ASCII 문자 집합의 표시는 0x5f로 종료되었습니다.따라서 (사진을 자세히 보면) 키가 없습니다.

{ | } ~ 

삼각자는 특정 문제를 해결하기 위해 정의되었습니다.C 프로그램은 ASR-33 및 ASCII 값이 높지 않은 다른 환경에서 ASCII 서브셋을 사용할 수 있습니다.

이 예시는 실제로??!, 각 의미|그 결과,||.

그러나 C코드를 거의 정의상 쓰는 사람들은 현대적인 1장비를 가지고 있기 때문에, 내 추측으로는 누군가 자랑을 하거나 자신을 즐겁게 하거나 코드 안에 부활절 달걀을 남겨서 당신이 찾을 수 있도록 하는 이다.

확실히 효과가 있었고, 널리 알려진 SO 질문으로 이어졌습니다.

ASR-33 텔레타이프

ASR-33 텔레타이프


1. 그 점에 있어서, 삼각자는 C가 가망 없는 성공을 거둔 후에 처음 개최된 ANSI 위원회가 발명했기 때문에, 원래의 C코드나 코더는 그것을 사용하지 않았을 것이다.

C삼각형이에요. ??!|, (그래서)??!??!는 연산자 입니다.||

바와 같이, 「 」는 「 」입니다.??!??!는 기본적으로 2개의 삼각문자(??! ★★★★★★★★★★★★★★★★★」??! 한 번) 뒤섞여 ||(즉, 프리프로세서에 의한 논리 OR).

모든 삼각형이 포함된 다음 표는 대체 삼각형의 조합을 명확히 하는 데 도움이 될 것입니다.

Trigraph   Replaces

??(        [
??)        ]
??<        {
??>        }
??/        \
??'        ^
??=        #
??!        |
??-        ~

출처 : C: 레퍼런스 매뉴얼 제5판

이렇게 이 있어요.??(??) 종적 to to to to to to to to to 로 매핑됩니다.[],??(??)??(??)할 수 있습니다.[][]츠키노

삼각자는 전처리 중에 대체되므로 sooly를 사용하여 출력을 직접 볼 수 있습니다.trigr.c★★★★★★★★★★★★★★★★★★:

void main(){ const char *s = "??!??!"; } 

다음을 사용하여 처리합니다.

cpp -trigraphs trigr.c 

콘솔 출력은

void main(){ const char *s = "||"; }

와 같이 option시시 as as as as as as as as 。-trigraphs.그렇지 않으면 지정되지 않습니다.그렇지 않으면cpp경고할 것이다; 이것은 삼각문자가 어떻게 과거의 것이며 그것과 마주칠있는 사람들을 혼란스럽게 하는 것 외에는 현대적 가치가 없음을 나타낸다.


삼각문자 도입의 근거에 대해서는 ISO/IEC 646의 역사 섹션을 보면 더 잘 이해할 수 있다.

ISO/IEC 646과 그 전신인 ASCII(ANSI X3.4)는 통신 산업의 문자 인코딩에 관한 기존 관행을 대부분 지지했다.

ASCII는 영어 이외의 언어에 필요한 문자를 많이 제공하지 않기 때문에, 일부사용되는 문자를 필요한 문자로 대체하는 국가적인 변종들이 많이 만들어졌다.

(내 것을 제외)

그래서 본질적으로 필요한 문자(삼각자가 존재하는 문자)가 특정 국가 변종에서 대체되었다.이것은 다른 변종들이 여전히 가지고 있는 문자로 구성된 삼각자를 사용하여 대체 표현으로 이어집니다.

언급URL : https://stackoverflow.com/questions/7825055/what-does-the-operator-do-in-c

반응형