오버플로우 방지에 관하여
, 김 재헌님이 작성#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <limits.h>
int main()
{
int age;
printf("콘텐츠 연령 제한이 있습니다.\n");
printf("만 나이를 입력하세요 : ");
scanf("%d", &age);
if (age < 18)
{
printf("청소년 관람 불가\n");
}
else
{
printf("컨텐츠를 시작합니다.\n");
}
return 0;
}
=====================================
오버&언더 플로우 예제를 풀다가 생각이 나서 질문드립니다.
(심사 문제와 무관합니다.)
오버플로우나 언더플로우에 해당되는 값을 사전에 차단하는 방법을 어떻게 구현해야할지 감이 오지 않아서요..
자료형의 범위를 초과하는 값을 넣었을때 의도치 않은 결과를 막을 수 있는 방법이 있을까요?
Re: 오버플로우 방지에 관하여
, 도장_ 관리자님이 작성나이 같은 정보는 입력값을 검사하는 코드를 넣으면 됩니다.
곱셈 등의 연산의 결과로 오버플로나 언더플로가 발생하는 경우는 매우 복잡합니다.
C 언어에서 오버플로나 언더플로는 정의되지 않은 동작(Undefined Behavior, UB)이고, 각 컴파일러 구현에 따라 결과가 달라집니다(대부분은 같은 결과를 내지만).
보통 오버플로 디텍션이라고 하는데, 이 부분은 전문적인 지식이 필요합니다.
관련 자료를 참고하세요.
가장 간단한 방법은 구글에서 만든 safe_iop 라이브러리의 함수를 사용하는 겁니다.
가장 많이 추천되는 해당 분야 논문
매우 어려운 주제라서 10년차 이상의 프로그래머도 대부분은 정확하게 이해하지 못하고 있는 경우가 많습니다.
자바에는 unsigned 타입이 없는데, 자바 창시자 제임스 고슬링이 C++을 사용할 때 대다수가 unsigned 타입의 동작을 제대로 이해하지 못한다는 사실을 발견했기 때문입니다.(자바8에 지원은 추가됨)