C언어는 절차적 언어에서 대표적인 언어이다.

 여기서 절차적 언어란, 실행한 동작을 실행하는 것으로 순서에 맞춰서 동작하는 것을 뜻한다.

 

 C언어는 기본적으로 함수로 이루어져 있으며, 함수란 '기능'들을 정의한 것을 뜻한다.

 

 대표적으로 프로그램이 동작하면, 먼저 실행되는 함수로 main이라는 함수가 존재한다.

 그래서 C언어를 먼저 작성할때, 다음과 같은 방식으로 소스가 구성된다.

1
2
3
4
int main(int argc, char** argv){
    return 0;
}
 
cs

 

 여기서 int 는 반환할 데이터의 크기를 뜻하고, main은 함수명, argc는 프로그램이 동작하기 전에 들어오는 명령들의 갯수를 뜻한다. argv는 프로그램이 실행하면서 프로그램에게 준 명령들을 뜻한다.

 return은 프로그램이 종료된 후에 운영체제 혹은 프로그램을 실행한 존재에게 값을 전송하는 것으로 '반환'하는 정보를 뜻한다.

 

 그래서 장치를 실행 시키면, 다음과 같은 창을 만들 수 있다.

 

 

 간단하게 특정 프로그램을 실행 시켜서 값을 나오게 하는 예시를 작성한다면,

1
2
3
4
int main(int argc, char** argv){
    return 1+1;
}
 
cs

 

이렇게 하면, 해당 프로그램을 실행시킨 후 반환되는 값은 1+1로 2라는 값을 반환하게 되며, CMD나 Powershell 같은 프로그램 실행한 개체가 그 값을 받아서 다른 작업을 하는데 사용 할 수 있다.

 

 C언어는 콘솔 환경(명령 프로토콜로 동작하는 Shell 환경에서 동작하는 장치)에 맞춰진 프로그램 언어였다.

 그래서, 요즘과는 익숙하지 않지만, CMD나 PowerShell등 Shell 환경에서 동작하면, 다음과 같이 작업이 가능하다.

 예시로

 PowerShell에서 적용한 예시.

 

 이렇게 해서 반환해서 출력한 후에 결과물을 보고 다음 작업을 할 수 있게 한다.

 

 내부에서 함수를 다양하게 만들어서 동작시키면 되기 때문에 이렇게 단순하게 적용하진 않지만, return에 0을 맞춰서 반환하도록 한다.

 이유는 컴퓨터에서 해당 프로그램을 실행한 대상자가 프로그램이 이상없이 종료가 되었는지 확인하여 대처하기 위함이다.

 

 argc는 'argument count'라는 것으로 프로그램이 실행할때 shell에 적용한 명령어들의 갯수를 세는 것으로 프로그램을 실행한 C_Base.exe라는 전달인자 1개가 무조건 들어가기 때문에 값이 1 이상이된다.

1
2
3
4
5
int main(int argc, char** argv)
{
    return argc;
}
 
cs

 

 

 이렇게 된다.

 

 argument를 더 넣는다면, 다음과 같다.

 

 ※ 여기서 argument의 갯수를 찾기 위해서 'Start-Process'라는 명령어를 사용하고 있지만, 원래는 '.\C_Base.exe a b c' 이런식의 명령을 줬을때 반환값이 저런식으로 들어간다는 것이다.

 

 argv는 'argument values' 전달 인자들의 값을 저장한다.

 이걸 간단하게 테스트하기 위해선 문자열을 반환하는 것보단 #include <stdio.h>[Standard IO Header File]을 이용해서 간단하게 출력을 해서 확인 할 수 있다.

 

 ※ Standard IO는 C언어를 제작한 개발 측에서 제공해주는 출력 및 입력에 관련된 함수들을 저장한 헤더 파일이다.

 

 다음과 같이 작성해서 확인이 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main(int argc, char** argv)
{
    int argcLoop = 0;
    printf("argc: %d\n", argc);
 
    for(argcLoop = 0; argcLoop < argc; ++argcLoop){
        printf("argv - %d: %s", argcLoop+1, argv[argcLoop]);
    }
 
    return 0;
}
 
cs

 

이 코드는 argument[전달인자]의 값을 받아서 몇 번째에 어떤 전달 인자가 들어가 있는지 출력하는 코드이다.

이 코드로 만든 프로그램을 인자 없이 실행 시켜보면,

 

 이렇게 실행 프로그램에 관련된 경로가 전달 인자에 들어가 있는걸 알 수 있다.

 이후에 더 많은 인자를 넣으면 다음과 같이 출력이 되는걸 확인 할 수 있다.

 

 띄워쓰기나 줄 바꿈을 넣지 않은 상태여서 확인을 하기 어려움이 있지만,

 argv - 을 기준으로 나눠서 보면, Shell에서 프로그램을 실행하기 전에 전달한 인자들이 출력되는걸 확인 할 수 있다.

 

 여기서 shell 명령까지 연결해서 작업을 하면,

 

 이렇게 Shell에게 특정 인자를 받아서 프로그램을 동작시키는 기능 등을 제작 할 수 있다.

'프로그래밍 > C 언어' 카테고리의 다른 글

[C] 제어(1) - 조건문 -  (0) 2024.02.17
[C] 연산자  (0) 2024.02.16
[C] 상수와 변수  (0) 2024.02.15
[C] 기본적으로 지원해주는 출력  (0) 2024.02.14
Posted by JunkMam
,