1. warning : trigraph ignored
백준 알고리즘 문제들 풀다가 낯선 에러를 만났다. 3중음자가 무시되었다..? 이게 무슨 소리람..
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("??!"); 로 했더니 에러가 발생했다.
'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