김펭귄 관찰일기
article thumbnail

1. warning : trigraph ignored


 백준 알고리즘 문제들 풀다가 낯선 에러를 만났다. 3중음자가 무시되었다..? 이게 무슨 소리람..

 

 

warning: trigraph ignored [-Wtrigraphs]

warning : trigraph ignored [-Wtrigraphs]
printf("??!");

 

2. trigraph ignored의 발생 원인


#include <stdio.h>

int main(){
    char input[51] = {0,};
    scanf("%s", input);
    printf("%s", input);
    printf("??!"); // <<이 부분이 에러>>
}

 문제에서 "??!"를 출력하라고 해서 단순히 printf("??!"); 로 했더니 에러가 발생했다.

 

 

warning: trigraph ignored [-Wtrigraphs]
출처 : 네이버 영어사전

'trigraph', 영알못인 내게 굉장히 생소한 단어였다. 아마 '??!' 이 부분이 문제인 것 같긴 한데 도통 감이 오지 않아 구글링을 해보니 바로 답이 나왔다.

 

3. trigraph ignored의 해결 방법


 다른 처리를 수행하기 전에, 다음 3개 문자("Trigraph Sequences")의 시퀀스 중 하나가 발생할 때마다 아래 표에 표시된 단일 문자로 대체된다고 한다. 어쩐지 문제에서 '준하의 놀람을 출력하라'라고 하길래 특이하다 생각했었는데 이런 숨은 뜻이..?!

 

ISO 646 문자 집합에는 C 문법의 모든 문자가 포함되어 있지 않기 때문에 키보드와 디스플레이가 있는 일부 시스템이 해당 문자를 처리할 수 없는 경우도 있다고 한다. 그래서 trigraph를 사용해 replacement에 있는 문자를 사용하도록 한 것이다. trigraph 기능을 끄는 방법도 있고 역슬래쉬 ('\')를 사용해 에러를 잡을 수 있다.

 

#include <stdio.h>

int main(){
    char input[51] = {0,};
    scanf("%s", input);
    printf("%s", input);
    printf("\?\?!");
}

 

에러 없이 아주 잘 나온다 :)

 

 

4. 출처


https://stackoverflow.com/questions/1234582/purpose-of-trigraph-sequences-in-c

 

Purpose of Trigraph sequences in C++?

According to C++'03 Standard 2.3/1: Before any other processing takes place, each occurrence of one of the following sequences of three characters (“trigraph sequences”) is replaced by the single

stackoverflow.com

profile

김펭귄 관찰일기

@Penguin.Kim