C에서 명령줄 인수
안녕하세요, 열정적인 프로그래머 되고자 하는 여러분! 오늘 우리는 C에서 명령줄 인수에 대한 흥미로운 여정을 시작할 것입니다. 여러분의 친절한 이웃 컴퓨터 선생님이자 저는 이 주제를 단계별로 안내해 드리겠습니다. 그러니 마음에 드는 음료를 한 잔 들고, 편안하게 자리를 잡고, 이제 시작해 보겠습니다!
명령줄 인수는 무엇인가요?
상상해 보세요, 여러분이 식당에 앉아 웨이터에게 무엇을 먹고 싶다고 말하는 场景. 이와 같은 방식으로, 명령줄 인수는 우리의 프로그램을 시작할 때 프로그램에 주는 지시입니다. 프로그램이 시작되자마자 입력이나 옵션을 제공하는 방법입니다.
기본 개념
C에서는 main()
함수의 두 가지 특별한 매개변수를 통해 명령줄 인수에 접근할 수 있습니다:
-
argc
(인수 개수): 이는 제공된 인수의 개수를 알려줍니다. -
argv
(인수 벡터): 이는 실제 인수를 포함하는 문자열 배열입니다.
간단한 예제를 보겠습니다:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("인수의 개수: %d\n", argc);
for (int i = 0; i < argc; i++) {
printf("인수 %d: %s\n", i, argv[i]);
}
return 0;
}
이 프로그램을 컴파일하고 다음과 같이 실행하면:
./program hello world
출력은 다음과 같습니다:
인수의 개수: 3
인수 0: ./program
인수 1: hello
인수 2: world
이를 분해해 보겠습니다:
-
argc
는 3입니다. 왜냐하면 우리에게 세 개의 인수가 있기 때문입니다. -
argv[0]
은 항상 프로그램 자신의 이름입니다. -
argv[1]
과argv[2]
은 우리가 제공한 인수입니다.
명령줄 인수를 사용하는 이유
명령줄 인수는 우리의 프로그램을 더 유연하게 만드는 데 매우 유용합니다. 프로그램의 동작을 변경하기 위해 코드를 수정하고 다시 컴파일할 필요 없이, 프로그램이 시작될 때 입력을 제공할 수 있습니다. Καфе에서 커피 주문을 커스터마이징하는 것과 같이, 매번 어떻게 원하는지 결정할 수 있습니다!
명령줄에서 숫자 인수 전달
이제 한 단계 더 나아가 보겠습니다. 우리가 프로그램에 숫자를 전달하고 싶다면 어떻게 할까요? 명령줄 인수는 모두 문자열로 오지만, 우리가 계산에 사용하기 위해서는 숫자로 변환해야 합니다.
두 개의 숫자를 더하는 예제를 보겠습니다:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("정확히 두 개의 숫자를 제공해 주세요.\n");
return 1;
}
int num1 = atoi(argv[1]);
int num2 = atoi(argv[2]);
int sum = num1 + num2;
printf("%d와 %d의 합은 %d입니다.\n", num1, num2, sum);
return 0;
}
이 프로그램을 다음과 같이 실행하면:
./add_numbers 5 7
출력은 다음과 같습니다:
5와 7의 합은 12입니다.
이 코드에서는 다음이 일어납니다:
- 인수의 개수가 정확히 3인지 확인합니다 (프로그램 이름 + 두 개의 숫자).
-
atoi()
(ASCII to Integer)를 사용하여 문자열 인수를 정수로 변환합니다. - 덧셈을 수행하고 결과를 출력합니다.
주의사항
언제나 입력을 검증하세요! 위의 예제에서, 누군가가 비수학적 인수로 프로그램을 실행하려고 시도하면, 그 프로그램은 부드럽게 처리되지 않습니다. 실제 애플리케이션에서는 더 robust한 오류 검사를 추가하고 싶을 것입니다.
명령줄 인수의 실용적인 사용 사례
명령줄 인수가 빛나는 실용적인 场景을 탐구해 보겠습니다:
1. 파일 연산
파일을 읽고 단어 수를 계산하는 프로그램을 상상해 보세요:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("사용법: %s < 파일이름 >\n", argv[0]);
return 1;
}
FILE *file = fopen(argv[1], "r");
if (file == NULL) {
printf("파일 %s를 열 수 없습니다.\n", argv[1]);
return 1;
}
int word_count = 0;
char word[100];
while (fscanf(file, "%s", word) != EOF) {
word_count++;
}
fclose(file);
printf("파일 %s에는 %d개의 단어가 포함되어 있습니다.\n", argv[1], word_count);
return 0;
}
이 프로그램을 다음과 같이 실행합니다:
./word_counter myfile.txt
이 프로그램은 명령줄 인수로 제공된 파일 이름을 사용하여 파일을 열고 처리합니다.
2. 프로그램 모드
명령줄 인수를 사용하여 프로그램의 다른 모드를 설정할 수도 있습니다:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("사용법: %s < 모드 >\n", argv[0]);
return 1;
}
if (strcmp(argv[1], "hello") == 0) {
printf("Hello, World!\n");
} else if (strcmp(argv[1], "goodbye") == 0) {
printf("Goodbye, World!\n");
} else {
printf("알 수 없는 모드: %s\n", argv[1]);
}
return 0;
}
이 프로그램을 다음과 같이 실행할 수 있습니다:
./greeter hello
또는
./greeter goodbye
이 프로그램은 제공된 인수에 따라 동작을 변경합니다.
일반 명령줄 인수 패턴
다음은 명령줄 인수에서 자주 볼 수 있는 패턴입니다:
패턴 | 예제 | 설명 |
---|---|---|
단일 대시 | -a |
일반적으로 단문자 옵션에 사용됩니다 |
이중 대시 | --all |
일반적으로 전체 단어 옵션에 사용됩니다 |
등호 기호 | --file=test.txt |
옵션에 값이 필요한 경우에 사용됩니다 |
공백으로 구분 | --file test.txt |
옵션에 값을 제공하는 또 다른 방법 |
이러한 것들은 관례이지 강제 사항은 아닙니다. 다양한 프로그램은 다양한 스타일을 사용할 수 있지만, 프로그램 내에서 일관성을 유지하는 것이 중요합니다!
결론
명령줄 인수는 프로그래머의 도구箱에서 강력한 도구입니다. 그들은 프로그램이 다양한 입력과 场景에 적응할 수 있도록 만들어줍니다. 코드를 수정하고 다시 컴파일할 필요 없이 동작을 변경할 수 있습니다.
프로그래밍 여정을 계속하면서, 명령줄 인수가 더 쉽고 프로그램을 더 다양하게 만들 수 있는 많은 场景을 만날 것입니다. 이를 습득하는 열쇠는 연습입니다. 다양한 방법으로 명령줄 인수를 프로그램에 사용해 보세요.
그리고 항상 기억하세요: 프로그래밍은 소통의 문제입니다. 명령줄 인수는 프로그램이 세상과 소통하는 또 다른 방법입니다. 행복한 코딩, 미래의 기술 마법사 여러분!
Credits: Image by storyset