[C/C++] 6. μ—”νŠΈλ¦¬ 포인트(Entry point)(feat. argc/argv)

2021. 4. 5. 22:31Β·ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 기초

 

 

 

μ˜€λŠ˜μ€ μ—”νŠΈλ¦¬ 포인트(Entry point)에 λŒ€ν•΄μ„œ 이야기해보렀고 ν•©λ‹ˆλ‹€. μ—”νŠΈλ¦¬ 포인트라고 ν•˜λ©΄ μ’€ κ±°μ°½ν•œ λŠλ‚ŒμΈλ°, 사싀 별 κ±° μ—†μŠ΅λ‹ˆλ‹€.

 

 

이전 ν¬μŠ€νŒ… 쀑 μ»΄νŒŒμΌλŸ¬μ™€ μ‹€ν–‰νŒŒμΌμ— λŒ€ν•΄μ„œ λ§μ”€λ“œλ ΈμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ C/C++둜 μ§  μ†ŒμŠ€μ½”λ“œλ₯Ό μ‹€ν–‰ν•  λ•Œ 항상 mainν•¨μˆ˜μ—μ„œ μ‹œμž‘ν•©λ‹ˆλ‹€. μ—¬λŸ¬ νŒŒμΌμ— μˆ˜λ§Žμ€ ν•¨μˆ˜κ°€ μžˆλ”λΌλ„ μ‹œμž‘μ€ 항상 mainν•¨μˆ˜λΆ€ν„° μ‹œμž‘ν•˜κΈ° λ•Œλ¬Έμ—, μ‹œμž‘ ꡬ문은 mainμ—μ„œ μ‹€ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

 

// C
#include <stdio.h>

int main()
{
    printf("Hello world");
    return 0;
}

μœ„ μ˜ˆμ œμ™€ 같이 κ°„λ‹¨ν•œ μ½”λ“œλ₯Ό λ§Œλ“€λ”λΌλ„ mainν•¨μˆ˜μ—μ„œ λ™μž‘ν•˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

// C++
#include <iostream>

int main()
{
    std::cout << "숫자λ₯Ό μž…λ ₯ν•˜μ„Έμš”:" << std::endl;
    int num = 0;
    std::cin >> num;
    
    std::cout << "μž…λ ₯ν•œ μˆ«μžλŠ” " << num << "μž…λ‹ˆλ‹€." << std::endl;
    
    return 0;
}

 

ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑에 μ‚¬μš©μžμ—κ²Œ μž…λ ₯λ°›μ•„μ•Ό ν•  상황이 생기면 standard inputꡬ문을 ν†΅ν•΄μ„œ μž…λ ₯값을 받을 수 μžˆμŠ΅λ‹ˆλ‹€.(Cμ—μ„œλŠ” scanf/scanf_s, C++μ—μ„œλŠ” cin)

 

 

λ§Œμ•½ ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ λ°›μ•„μ•Ό ν•  μΈμžκ°€ 항상 10개 이상 ν˜Ήμ€ 50개 이상이라고 κ°€μ •ν•˜λ©΄, 인자 개수만큼 μž…λ ₯λ°›λŠ” μ½”λ“œλ„ μž‘μ„±ν•΄μ•Ό ν•˜κ³  μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ 개수만큼 μž…λ ₯ν•΄μ€˜μ•Ό ν•  κ²λ‹ˆλ‹€. ν•˜λ£¨μ— ν”„λ‘œκ·Έλž¨μ„ 10번만 싀행해도 μž…λ ₯값을 100개 500개 μž…λ ₯ν•˜λŠ” λ²ˆκ±°λ‘œμ›€μ΄ μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

κ°œμ„ λ°©λ²•μœΌλ‘œ μ €λŠ” μΈμžλ“€μ„ λͺ¨μ•„놓은 νŒŒμΌμ„ λ§Œλ“€κ³  κ·Έ νŒŒμΌμ„ μž…λ ₯κ°’μœΌλ‘œ λ°›μ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

// C++
#include <iostream>
#include <string>

int main()
{
    std::cout << "경둜λ₯Ό μž…λ ₯ν•˜μ„Έμš”:" << std::endl;
    
    // 파일 경둜 μž…λ ₯
    std::path;
    std::cin >> path;
    
    std::cout << "μž…λ ₯ν•œ κ²½λ‘œλŠ” " << path << "μž…λ‹ˆλ‹€." << std::endl;
    
    // 파일 읽기 μ‹œμž‘
    FILE* fd = fopen(path.c_str(), "r");
    ...
    
    return 0;
}

 

μœ„μ™€ 같이 파일 경둜λ₯Ό μž…λ ₯λ°›μ•„μ„œ μˆ˜μ‹­κ°œμ˜ 인자λ₯Ό ν•˜λ‚˜μ˜ 인자둜 μž…λ ₯λ°›μ•„μ„œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

ν•˜μ§€λ§Œ μœ„ 방법도 μ‹€ν–‰ν•  λ•Œλ§ˆλ‹€ 경둜λ₯Ό μž…λ ₯ν•΄μ£Όμ–΄μ•Ό ν–ˆκΈ° λ•Œλ¬Έμ— μ™„μ „νžˆ κ°œμ„ λλ‹€κ³ λŠ” ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μž…λ ₯값을 λ°›μ§€ μ•Šκ³  ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ 인자λ₯Ό 받을 수 μžˆλŠ” 방법이 μžˆμ„κΉŒμš”?

 

 

μ—¬κΈ°μ„œ μ—”νŠΈλ¦¬ 포인트(Entry point)κ°€ λ‚˜μ˜΅λ‹ˆλ‹€.

 

// C
#include <stdio.h>

int main(int argc, char* argv[])
{
    printf("인자의 κ°œμˆ˜λŠ”: %d개 μž…λ‹ˆλ‹€."\n);
    for ( int i = 0; i < argc; i++ )
    {
        printf("인자 %d: %s\n", i+1, argv[i]);
    }
    
    return 0;
}

 

μ—¬κΈ°μ„œ argcλŠ” μž…λ ₯받은 인자의 개수(argument count), argvλŠ” μž…λ ₯받은 인자의 λ°°μ—΄(argument vector)을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μž…λ ₯받은 μΈμžκ°’μ€ λ¬Έμžμ—΄ ν˜•νƒœλ‘œ λ°›κΈ° λ•Œλ¬Έμ— λ°›μ•„μ˜¨ 값을 μ μ ˆν•˜κ²Œ μ²˜λ¦¬ν•  ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

main의 λ§€κ°œλ³€μˆ˜μΈ int argc, char* argv[]λŠ” κ³ μ •λœ ν˜•νƒœμ΄λ―€λ‘œ μž„μ˜λ‘œ λ°”κΎΈλ©΄ λ™μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

main.exe hello world g-stack

 

μ‹€ν–‰μ‹œ μœ„μ™€ 같이 μž…λ ₯값을 μ€€λ‹€λ©΄ 좜λ ₯ 값은 λ‹€μŒκ³Ό 같이 λ‚˜μ˜΅λ‹ˆλ‹€.

 

인자의 κ°œμˆ˜λŠ” 4개 μž…λ‹ˆλ‹€.

인자 1: ./main.exe

인자 2: hello

인자 3: world

인자 4: g-stack

 

 

 

μ—¬κΈ°μ„œ μ•Œμ•„λ‘¬μ•Ό ν•  것은 첫 번째 인자(argv[0])λŠ” 항상 μ‹€ν–‰νŒŒμΌμ˜ 이름이 λ“€μ–΄μ˜΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μ‹€μ œλ‘œ λ‚΄κ°€ 넣은 첫 번째 μΈμžλŠ” argv[1]둜 가져와야 ν•©λ‹ˆλ‹€. 

 

μœˆλ„μš°μ—μ„œλŠ” cmdλ₯Ό 톡해 인자λ₯Ό 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.(μΈμžκ°’: config.txt경둜)

 

 

 

μ•„κΉŒμ˜ μƒν™©μœΌλ‘œ λŒμ•„μ™€μ„œ 파일 경둜λ₯Ό main의 인자둜 μ „λ‹¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

// C
#include <stdio.h>

int main(int argc, char* argv[])
{
    if ( argc > 2 )
        printf("μΈμžλŠ” ν•˜λ‚˜λ§Œ μž…λ ₯ν•΄μ£Όμ„Έμš”\n");
    
    char* path = argv[1];
    
    // 파일 읽기 μ‹œμž‘
    FILE* fd = fopen(path, "w");
    ...
    
    return 0;
}

 

argcλŠ” μ‹€ν–‰νŒŒμΌ 이름을 ν¬ν•¨ν•΄μ„œ 2κ°œκΉŒμ§€λ§Œ ν—ˆμš©ν•˜λŠ” μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό λ¨Όμ € ν–ˆμŠ΅λ‹ˆλ‹€. 그리고 μž…λ ₯받은 경둜λ₯Ό ν†΅ν•΄μ„œ νŒŒμΌμ„ μ½μ–΄μ„œ μ‹€μ œ ν•„μš”ν•œ 인자λ₯Ό 자유둭게 κ°€μ Έμ˜¬ 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

 

 

 

μœ„ 상황 말고도 μ—”νŠΈλ¦¬ν¬μΈνŠΈλ₯Ό ν™œμš©ν•˜λŠ” 방법은 λ§ŽμŠ΅λ‹ˆλ‹€. ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ μ‹€ν–‰λ˜λŠ” mainν•¨μˆ˜μ— 인자λ₯Ό μ£Όκ³  μ‹Άλ‹€λ©΄ μ—”νŠΈλ¦¬ν¬μΈνŠΈλ₯Ό κΈ°μ–΅ν•˜μ‹œκΈΈ λ°”λžλ‹ˆλ‹€.

 

 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ > C++ 기초' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[C/C++] 7. κ°œλ°œν™˜κ²½ ꡬ성(windows/linux)  (2) 2023.04.11
Makefile 기초  (0) 2023.04.11
[C/C++] 5. 반볡문(Iteration statements) - whileλ¬Έ(while loop)  (0) 2021.04.03
[C/C++] 4. 반볡문(Iteration statements) - forλ¬Έ(for loop)  (0) 2021.03.29
[C/C++] 3. 쑰건문(Conditional statement)  (1) 2021.03.18
'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/C++ 기초' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C/C++] 7. κ°œλ°œν™˜κ²½ ꡬ성(windows/linux)
  • Makefile 기초
  • [C/C++] 5. 반볡문(Iteration statements) - whileλ¬Έ(while loop)
  • [C/C++] 4. 반볡문(Iteration statements) - forλ¬Έ(for loop)
μ„œμ•„λž‘πŸ˜ƒ
μ„œμ•„λž‘πŸ˜ƒ
Just Do ItπŸ’ͺ
  • μ„œμ•„λž‘πŸ˜ƒ
    G-Stack
    μ„œμ•„λž‘πŸ˜ƒ
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (144)
      • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (78)
        • C++ 기초 (28)
        • C++ μ‘μš© (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • 컴퓨터 ꡬ쑰 & 운영체제 (31)
      • μ•Œκ³ λ¦¬μ¦˜ (12)
      • λ°μ΄ν„°λ² μ΄μŠ€ (5)
      • λ„€νŠΈμ›Œν¬ (3)
      • λ””μžμΈνŒ¨ν„΄ (5)
      • μ„œλΉ„μŠ€ & 툴 (7)
      • νŠΈλ Œλ“œ&이슈 (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

    • GμŠ€νƒμ˜ 기술 λΈ”λ‘œκ·Έ
  • 인기 κΈ€

  • νƒœκ·Έ

    λ°°μ—΄
    μ•Œκ³ λ¦¬μ¦˜
    c
    파이썬
    ν•˜λ“œλ””μŠ€ν¬
    pointer
    νŒ¨ν‚€μ§€
    ν•¨μˆ˜
    λ°μ΄ν„°λ² μ΄μŠ€
    fork
    component
    μŠ€νƒ
    μž¬κ·€
    포인터
    λ©”λͺ¨λ¦¬
    반볡문
    λ³€μˆ˜
    λ””μžμΈνŒ¨ν„΄
    상속
    가상메λͺ¨λ¦¬
    go
    컴퓨터
    cpu
    Thread
    RAM
    init
    νŒŒμΌμž…μΆœλ ₯
    쑰건문
    STD
    c++
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
μ„œμ•„λž‘πŸ˜ƒ
[C/C++] 6. μ—”νŠΈλ¦¬ 포인트(Entry point)(feat. argc/argv)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”