2.6 Defining Names for Constants
프로그램에 상수가 포함되어 있을 때는 종종 상수에 이름을 붙이는 것이 좋다. dweight.c나 dweight2.c 프로그램은 상수 166에 의존하는데, 그 의미는 프로그램을 읽는 다른 사람에게 모호할 수 있다. 매크로 함수를 이용하여, 이 상수의 이름을 다음과 같이 지을수 있다.
#define INCHES_PER_POUND 165
#define은 #include와 마찬가지로 전처리문이기에, 줄의 끝에는 세미콜론을 붙이지 않는다.
프로그램이 컴파일될 때, 전처리기는 각각의 매크로를 그것이 나타내는 값으로 대체한다. 예를 들어 다음 문장은
weight = (volume + INCHES_PER_POUND -1) / INCHES_PER_POUND;
다음과 같이
weight = (volume + 166 -1) / 166;
뒤의 문장을 쓴 것과 같은 효과가 나타난다. 매크로의 값은 expression(수식)으로 될 수 있다.
#define RECIPREOCAL_OF_PI (1.0f / 3.14159f)
만약 연산자를 포함한다면, 식을 괄호로 묶어주어야한다.
매크로 이름에는 대문자만 사용했는데, 이것은 대다수의 C프로그래머들이 따르는 규칙이다. (필수사항은 아니다.)
그렇지만 관례가 있기에 이 규칙을 따르는 것이 좋을 것이다.
PROGRAM: Converting from Fahrenheit to Celsius
다음 프로그램은 사용자에게 화씨 온도를 입력하라는 메시지를 표시하고 동일한 섭씨 온도를 인쇄한다. 프로그램의 출력은 다음처럼 된다.
Enter Fahrenheit temperature: 212 //212는 사용자 입력값
Celsius equivalent: 100.0
이 프로그램은 정수가 아닌 온도도 허용해야하기에, 섭씨온도가 100이 아닌 100.0으로 표시된다.
/* Convers a Fahrenheit temperature to Celsius */
#include <stdio.h>
#define FREEZING_PT 32.0f
#define SCALE_FACTOR (5.0f / 9.0f)
int main(void)
{
float fahrenheit, celsius;
printf("Enter Fahrenheit temperature: ");
scanf("%f", &fahrenheit);
celsius = (fahrenheit - FREEZING_PT) * SCALE_FACTOR;
printf("Celsius equivalent: %.1f\n", celsius);
return 0;
}
문장 celsius = (fahrenheit - FREEZING_PT) * SCALE_FACTOR;는 화씨 온도를 섭씨로 바꿔준다. FREEZING_PT가 32.0f를 의미하고, SCALE_FACTOR가 (5.0f / 9.0f) 를 의미하기에 컴파일러는 다음처럼 해석한다.
celsius = (fahrenheit - 32.0f) * (5.0f / 9.0f);
SCALE_FACTOR를 (5.0f / 9.0f)로 쓰는것은 중요한 사항이다. 5/9로 쓴다면 C가 두 정수가 나뉘는 것으로 생각하여 자른 결과를 준다. 5/9는 0이 될 것이고, 우리가 원하는 결과가 나오지 않는다.
printf의 호출은 섭씨를 기록하기 위함이다. %.1f를 사용하여 섭씨가 소숫점 뒤 한자리만 나오도록 표시했다.
'C언어 > Basic Features of C' 카테고리의 다른 글
2.(8) C Fundamentals - Layout of a C Program (0) | 2021.02.19 |
---|---|
2.(7) C Fundamentals - 식별자 (0) | 2021.02.15 |
2.(5) C Fundamentals - 입력값 읽기 (0) | 2021.01.07 |
2.(4) C Fundamentals - Variables and Assignment (0) | 2020.12.27 |
2.(3) C Fundamentals - 주석 작성 (0) | 2020.12.27 |