no swim no life

CODE complete, 12: 기본 데이터 형 본문

work/fundamental

CODE complete, 12: 기본 데이터 형

달려간다 2009. 1. 22. 19:00

명명된 상수

  • 매직 넘버(magic number)를 피한다. 매직 넘버는 100이나 47524와 같이 아무런 설명도 없이 프로그램 한가운데 나타나는 리터널 숫자이다. (문자열도 마찬가지) 
  • named constant를 이용하며, 필요하다면 1, 0은 그냥 사용한다.

정수

곱셈으로 인한 정수 오버플로우에 주의한다. 아래는 정수의 표현범위 이다.

 정수형  범위
 부호 있는 8비트  -128 ~ 127
 부호 없는 8비트  0 ~ 255
 부호 있는 16비트  -32,768 ~ 32,767
 부호 없는 16비트  0 ~ 65,535
 부호 있는 32비트  -2,147,483,648 ~ 2,147,483,647
 부호 없는 32비트  0 ~ 4,294,967,295
 부호 있는 64비트  -9,223,372,036,854,775,808
 ~ 9,223,372,036,854,775,807
 부호 없는 64비트  0 ~ 18,446,744,073,709,551,615

부동소수점

부동소수점을 사용할 때 가장 중요하게 고려해야 할 사항은 많은 분수 값이 디지털 컴퓨터의 1과 0을 사용하여 정확하게 표현될 수 없다는 점이다. 32비트 부동소수점을 사용한다면 5,000,000.02 - 5,000,000.01 의 결과 값은 아마도 0.0일 것이다.

double nominal = 1.0;
double sum = 0.0;

for ( int i = 0 ; i < 10 ; i++ )
{
    sum += 0.1;
}

if ( nominal == sum )
{
    System.out.println( "Numbers are the same." );
}
else
{
    System.out.println( "Numbers are different." );
}

결과:
Numbers are different.

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999

이를 해결하기 위해 합리적인 정확도의 범위를 결정하여 값이 충분히 근사한지를 결정하는 함수를 사용한다.

문자와 문자열

사용하는 언어와 환경에서 Unicode를 어떻게 지원하는지 파악한다.

배열

  • 중첩된 루프에서 인덱스가 혼선(cross-talk)되지 않도록 주의한다.
  • C에서는 배열을 다루기 위해서 ARRAY_LENGTH() 매크로를 사용한다.
    #define ARRAY_LENGTH( x ) ( sizeof(x) / sizeof(x[0]) )

새로운 형 만들기 (typedef)

기능 지향적인 이름으로 형을 생성한다.
typedef double Coordinate;

'work > fundamental' 카테고리의 다른 글

CODE complete, 13: 특이한 데이터 형  (0) 2009.01.31
CODE complete, 11: 변수 이름의 효과  (0) 2009.01.09
CL 컴파일러 옵션 (VC++)  (0) 2009.01.06
Comments