그동안 기계적으로 써온 main
함수 내의 void
는 무슨 의미인지 찾아봤다. void
는 자료형이다. int main()
이라고 작성하면 정수형 값을 돌려주겠다는 의미처럼, void
는 C에서 파생된 여러 언어에서 정상적으로 반환하지만 호출자에게 결과값을 제공하지 않는 함수의 결과를 위한 타입이다. 굳이 리턴해줄 필요가 없을 때 사용하는 자료형인 것이다. return
을 생략하거나 return;
만 작성해도 된다.
이번 강의에서는 void
대신 argc
, argv
를 사용해서 main
함수를 자세히 살펴보는 시간을 가졌다.
#include <cs50.h>
#include <stdio.h>
int main(int argc, string argv[])
{
if (argc == 2)
{
printf("hello, %s\n", argv[1]);
}
else
{
printf("hello, world\n");
}
}
여기서 argc
는 main 함수가 받게될 입력의 갯수이다. 그리고 argv[ ]
는 입력이 포함되어 있는 배열이다. 프로그램을 명령행에서 실행하므로, 입력은 문자열로 주어진다. 따라서 argv[ ]
는 string 배열이 된다.
C언어 프로그램을 실행할 때 clang 또는 make라는 명령어를 입력함으로써 프로그램을 컴파일한다. 이때 추가 인자를 넣을 수 있다. 이걸 명령행 인자라고 부른다. 명령어를 칠 때 직접 인자를 넣을 수 있다는게 신기했다.
기본적으로 argv[0]
에는 프로그램의 이름이 저장된다. 그래서 하나의 입력이 더 주어진다면 argv[1]
에 저장된다.
hello, world
hello, moon
argc
를 3으로 하고 argc[2]로 바꾸면 아래와 같이 나온다.