C 마クロ: 초보자 가이드
안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 C 언어의 마법적인 세계, 마cro의 세계로 접수합니다. 코드를 한 줄도 작성해 본 적이 없으신 분들도 걱정 마세요 - 이 여정에서 여러분의 친절한 안내자가 되겠습니다. 이 튜토리얼이 끝나면 여러분이 얼마나 많이 배웠는지 놀라실 겁니다!
마cro는 무엇인가요?
먼저, 마cro에 대해 이해해 보겠습니다. 마cro는 코드의 단축키나 템플릿을 생각해 보세요. 여러분의 코딩 생활을 더 쉽게 만들고 프로그램을 더 효율적으로 만들어주는 작은 도우미들입니다.
객체似的 마cro
가장 간단한 형태의 마cro에서 시작해 보겠습니다: 객체似的 마cro.
정의와 문법
객체似的 마cro는 #define
지시어를 사용하여 정의됩니다. 기본 문법은 다음과 같습니다:
#define MACRO_NAME value
예제
다음 예제를 보겠습니다:
#define PI 3.14159
#define MAX_STUDENTS 100
#define SCHOOL_NAME "Coder's Academy"
이 예제에서, 컴파일러가 PI
를 볼 때마다 3.14159
로 치환합니다. 마찬가지로 MAX_STUDENTS
는 100
, SCHOOL_NAME
은 "Coder's Academy"로 치환됩니다.
코드에서의 사용
이제 이 마cro를 코드에서 어떻게 사용할 수 있는지 보겠습니다:
#include <stdio.h>
#define PI 3.14159
#define MAX_STUDENTS 100
int main() {
float radius = 5.0;
float area = PI * radius * radius;
printf("원의 면적은: %.2f\n", area);
printf("우리 학교는 %d 명의 학생을 수용할 수 있습니다.\n", MAX_STUDENTS);
return 0;
}
이 프로그램을 실행하면 다음과 같은 출력이 나옵니다:
원의 면적은: 78.54
우리 학교는 100 명의 학생을 수용할 수 있습니다.
이렇게 마cro를 일반 변수처럼 사용할 수 있지만, 실제로는 프로그램이 컴파일되기 전에 그들의 값을 치환합니다. 멋지지 않나요?
함수似的 마cro
이제 한 단계 더 나아가 함수似的 마cro를 살펴보겠습니다. 이들은 함수처럼 보이지만 약간 다르게 작동합니다.
정의와 문법
함수似的 마cro의 문법은 다음과 같습니다:
#define MACRO_NAME(parameters) (macro_body)
예제
다음 두 가지 예제를 보겠습니다:
#define SQUARE(x) ((x) * (x))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
코드에서의 사용
이제 이 마cro를 프로그램에서 사용해 보겠습니다:
#include <stdio.h>
#define SQUARE(x) ((x) * (x))
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int main() {
int num1 = 5, num2 = 7;
printf("%d의 제곱은 %d\n", num1, SQUARE(num1));
printf("%d와 %d의 최대값은 %d\n", num1, num2, MAX(num1, num2));
return 0;
}
이 프로그램은 다음과 같은 출력을 보여줍니다:
5의 제곱은 25
5와 7의 최대값은 7
SQUARE(5)
는 ((5) * (5))
로, MAX(5, 7)
는 ((5) > (7) ? (5) : (7))
로 치환되어 프로그램이 컴파일되기 전에 치환됩니다.
연속된 마cro
연속된 마cro는 하나의 마cro가 다른 마cro를 정의에 사용하는 것입니다. 마cro의 마cro 인셔션입니다!
예제
#define SQUARE(x) ((x) * (x))
#define CUBE(x) (SQUARE(x) * (x))
여기서 CUBE
는 SQUARE
를 정의에 사용하고 있습니다. CUBE(3)
를 사용할 때, 먼저 (SQUARE(3) * (3))
로 확장되고, 그后再 (3 * 3) * (3)
로 확장됩니다.
가변 인수 마cro
가변 인수 마cro는 변하는 인수 개수를 받을 수 있는 마cro로, 마치 스위스 아ーノ이Knife 같습니다!
문법
#define MACRO_NAME(args...) macro_body
예제
#include <stdio.h>
#define DEBUG_PRINT(format, ...) printf("Debug: " format "\n", ##__VA_ARGS__)
int main() {
int x = 5;
float y = 3.14;
DEBUG_PRINT("x = %d", x);
DEBUG_PRINT("x = %d, y = %.2f", x, y);
return 0;
}
이 프로그램은 다음과 같은 출력을 보여줍니다:
Debug: x = 5
Debug: x = 5, y = 3.14
마cro 정의의 ...
는 인수의 수를 받아들이고, __VA_ARGS__
는 마cro 본문에서 이 인수들을 치환합니다.
사전 정의된 마cro
C는 몇 가지 유용한 내장 마cro를 제공합니다. 다음은 그 중 몇 가지입니다:
마cro | 설명 |
---|---|
__FILE__ |
현재 파일명 |
__LINE__ |
현재 줄 번호 |
__DATE__ |
컴파일 날짜 |
__TIME__ |
컴파일 시간 |
__STDC__ |
컴파일러가 ANSI C를 준수하면 1 |
예제
#include <stdio.h>
int main() {
printf("이 파일의 이름은 %s\n", __FILE__);
printf("이는 줄 %d\n", __LINE__);
printf("compilation 날짜 %s at %s\n", __DATE__, __TIME__);
return 0;
}
이 프로그램은 다음과 같은 출력을 보여줍니다:
이 파일의 이름은 example.c
이는 줄 5
compilation 날짜 Jul 10 2023 at 15:30:45
이제 여러분은 C 마cro의 세계에 첫 걸음을 내딛었습니다. 마cro는 강력한 도구이지만, 지혜롭게 사용해야 합니다. 코드를 더 효율적이고 읽기 쉽게 만들 수 있지만, 과도한 사용은 혼란을 줄 수 있습니다. 연습하고 실험하고, 곧 마cro를 마스터하시길 바랍니다!
Credits: Image by storyset