νƒœκ·Έ 보관물: main

main

C와 C ++μ—μ„œ main ()은 무엇을 λ°˜ν™˜ν•΄μ•Όν•©λ‹ˆκΉŒ? main()- μ΄μœ λŠ”?

μ˜¬λ°”λ₯Έ (κ°€μž₯ 효율적인)을 μ •μ˜ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ main()– C와 C ++의 κΈ°λŠ₯ int main()λ˜λŠ” void main()– μ΄μœ λŠ”? λ§Œμ•½ int main()λ‹€μŒ return 1λ‚˜ return 0?


이 μ§ˆλ¬Έμ—λŠ” λ‹€μŒμ„ ν¬ν•¨ν•˜μ—¬ μˆ˜λ§Žμ€ 사본이 μžˆμŠ΅λ‹ˆλ‹€.

κ΄€λ ¨ :



λ‹΅λ³€

의 λ°˜ν™˜ κ°’ main은 ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œ 된 방법 을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 정상 μ’…λ£ŒλŠ”μ˜ 0 λ°˜ν™˜ κ°’μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€ main. 비정상 μ’…λ£ŒλŠ” 0이 μ•„λ‹Œ 리턴에 μ˜ν•΄ ν‘œμ‹œλ˜μ§€λ§Œ 0이 μ•„λ‹Œ μ½”λ“œλ₯Ό ν•΄μ„ν•˜λŠ” 방법에 λŒ€ν•œ ν‘œμ€€μ€ μ—†μŠ΅λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μ§€μ ν–ˆλ“―μ΄ void main()C ++ ν‘œμ€€μ— μ˜ν•΄ κΈˆμ§€λ˜μ–΄ μžˆμœΌλ―€λ‘œ μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. μœ νš¨ν•œ C ++ mainμ„œλͺ…은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

int main()

κ³Ό

int main(int argc, char* argv[])

μ–΄λŠ 것이

int main(int argc, char** argv)

λ˜ν•œ C ++μ—μ„œλŠ” int main()return-statement없이 남겨 λ‘˜ 수 있으며이 μ‹œμ μ—μ„œ 기본값은 0을 λ°˜ν™˜ν•©λ‹ˆλ‹€. μ΄λŠ” C99 ν”„λ‘œκ·Έλž¨μ—μ„œλ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. return 0;μƒλž΅ν•΄μ•Όν•˜λŠ”μ§€ μ—¬λΆ€ λŠ” λ…ΌμŸμ˜ 여지가 μžˆμŠ΅λ‹ˆλ‹€. μœ νš¨ν•œ C ν”„λ‘œκ·Έλž¨ κΈ°λ³Έ μ„œλͺ…μ˜ λ²”μœ„λŠ” 훨씬 ν½λ‹ˆλ‹€.

νš¨μœ¨μ„±μ€ mainκΈ°λŠ₯에 λ¬Έμ œκ°€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ . C ++ ν‘œμ€€μ— 따라 ν•œ 번만 μž…λ ₯ν•˜κ³  남겨 λ‘˜ 수 μžˆμŠ΅λ‹ˆλ‹€ (ν”„λ‘œκ·Έλž¨ μ‹œμž‘ 및 μ’…λ£Œ ν‘œμ‹œ). C의 경우, 재 μž…λ ₯ main()이 ν—ˆμš©λ˜μ§€λ§Œ ν”Όν•΄μ•Όν•©λ‹ˆλ‹€.


λ‹΅λ³€

ν—ˆμš© 된 닡변은 C ++을 λŒ€μƒμœΌλ‘œν•˜λŠ” κ²ƒμœΌλ‘œ λ³΄μ΄λ―€λ‘œ C와 κ΄€λ ¨λœ 닡변을 μΆ”κ°€ ν•  것이라고 μƒκ°ν–ˆλŠ”λ° λͺ‡ κ°€μ§€λ©΄μ—μ„œ λ‹€λ¦…λ‹ˆλ‹€.

ISO / IEC 9899 : 1989 (C90) :

main() λ‹€μŒ 쀑 ν•˜λ‚˜λ‘œ μ„ μ–Έλ˜μ–΄μ•Όν•©λ‹ˆλ‹€.

int main(void)
int main(int argc, char **argv)

λ˜λŠ” λ™λ“±ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ int main(int argc, char *argv[])두 번째 것과 κ°™μŠ΅λ‹ˆλ‹€. λ˜ν•œ intλ°˜ν™˜ μœ ν˜•μ€ κΈ°λ³Έκ°’μ΄λ―€λ‘œ μƒλž΅ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ΅¬ν˜„μ΄ ν—ˆμš©ν•˜λŠ” 경우 main()λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ μ„ μ–Έ ν•  수 μžˆμ§€λ§Œ 이둜 인해 ν”„λ‘œκ·Έλž¨ κ΅¬ν˜„μ΄ μ •μ˜λ˜κ³  더 이상 μ—„κ²©ν•˜κ²Œ μ€€μˆ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 ν‘œμ€€μ€ μ—„κ²©ν•˜κ²Œ μ€€μˆ˜ν•˜λŠ” (즉, μ •μ˜ 된 κ΅¬ν˜„ λ™μž‘μ— μ˜μ‘΄ν•˜μ§€ μ•ŠμŒ) λ°˜ν™˜ 0및 EXIT_SUCCESS성곡적인 μ’…λ£Œ 및 EXIT_FAILUREμ‹€νŒ¨ν•œ μ’…λ£Œμ— λŒ€ν•œ 3 개의 값을 μ •μ˜ ν•©λ‹ˆλ‹€. λ‹€λ₯Έ 값은 λΉ„ν‘œμ€€μ΄λ©° κ΅¬ν˜„μ΄ μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ •μ˜λ˜μ§€ μ•Šμ€ λ™μž‘μ„ ν”Όν•˜λ €λ©΄ 끝에 main()λͺ…μ‹œμ μΈ returnμ§„μˆ  이 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€ .

λ§ˆμ§€λ§‰μœΌλ‘œ, ν‘œμ€€ 관점 main()μ—μ„œ ν”„λ‘œκ·Έλž¨ 을 호좜 ν•  λ•Œ μ•„λ¬΄λŸ° λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€ .

ISO / IEC 9899 : 1999 (C99) :

C99의 경우 λ‹€μŒμ„ μ œμ™Έν•˜κ³  λͺ¨λ“  것이 μœ„μ™€ λ™μΌν•©λ‹ˆλ‹€.

  • intλ°˜ν™˜ν˜•λŠ” μƒλž΅ 될 수 μ—†λ‹€.
  • μ—μ„œ return 문을 μƒλž΅ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ main(). λ‹Ήμ‹ μ΄ν•˜κ³  main()끝내면 μ•”μ‹œ 적 return 0μž…λ‹ˆλ‹€.

λ‹΅λ³€

ν‘œμ€€ C β€” ν˜ΈμŠ€νŒ… ν™˜κ²½

ν˜ΈμŠ€νŒ… ν™˜κ²½ (일반적인 ν™˜κ²½)의 경우 C11 ν‘œμ€€ (ISO / IEC 9899 : 2011)은 λ‹€μŒκ³Ό 같이 λ§ν•©λ‹ˆλ‹€.

5.1.2.2.1 ν”„λ‘œκ·Έλž¨ μ‹œμž‘

ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ 호좜 된 ν•¨μˆ˜μ˜ 이름은 mainμž…λ‹ˆλ‹€. κ΅¬ν˜„μ€μ΄ ν•¨μˆ˜μ— λŒ€ν•œ ν”„λ‘œν†  νƒ€μž…μ„ μ„ μ–Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ°˜ν™˜ μœ ν˜• intκ³Ό 맀개 λ³€μˆ˜μ—†μ΄ μ •μ˜ν•΄μ•Όν•©λ‹ˆλ‹€ .

int main(void) { /* ... */ }

λ˜λŠ” 두 개의 맀개 λ³€μˆ˜κ°€μžˆλŠ” 경우 (μ—¬κΈ°μ„œ as argc및 μ°Έμ‘°) argv, μ„ μ–Έ 된 ν•¨μˆ˜μ˜ 둜컬 μ΄λ¦„μ΄λ―€λ‘œ λͺ¨λ“  이름을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

int main(int argc, char *argv[]) { /* ... */ }

λ˜λŠ” λ™λ“±ν•œ 것; 10) λ˜λŠ” λ‹€λ₯Έ κ΅¬ν˜„ μ •μ˜ λ°©μ‹μœΌλ‘œ.

이듀이 μ„ μ–Έλ˜λ©΄, main ν•¨μˆ˜μ— λŒ€ν•œ 맀개 λ³€μˆ˜λŠ” λ‹€μŒ μ œμ•½ 쑰건을 λ”°λΌμ•Όν•©λ‹ˆλ‹€.

  • 의 κ°€μΉ˜ argc μŒμˆ˜κ°€ μ•„λ‹ˆμ–΄μ•Όν•œλ‹€.
  • argv[argc] 널 ν¬μΈν„°μ΄μ–΄μ•Όν•œλ‹€.
  • 의 κ°’ argc이 0보닀 크면 λ°°μ—΄ 멀버 argv[0]λŠ”
    argv[argc-1] 논리합 ν”„λ‘œκ·Έλž¨μ„ μ‹œμž‘ν•˜κΈ° 전에 호슀트 ν™˜κ²½ κ΅¬ν˜„ μ •μ˜ 값을 주어진 λ¬Έμžμ—΄μ— λŒ€ν•œ 포인터λ₯Ό ν¬ν•¨ν•œλ‹€. ν˜ΈμŠ€νŒ… ν™˜κ²½μ˜ λ‹€λ₯Έ κ³³μ—μ„œ ν”„λ‘œκ·Έλž¨μ„ μ‹œμž‘ν•˜κΈ° 전에 κ²°μ •λœ ν”„λ‘œκ·Έλž¨ 정보λ₯Ό μ œκ³΅ν•˜κΈ°μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€. 호슀트 ν™˜κ²½μ—μ„œ λŒ€λ¬Έμžμ™€ μ†Œλ¬Έμžλ‘œ λ¬Έμžμ—΄μ„ 제곡 ν•  μˆ˜μ—†λŠ” 경우 κ΅¬ν˜„μ‹œ λ¬Έμžμ—΄μ„ μ†Œλ¬Έμžλ‘œ μˆ˜μ‹ ν•΄μ•Όν•©λ‹ˆλ‹€.
  • 의 κ°’ argc이 0보닀 큰 경우 byκ°€ κ°€λ¦¬ν‚€λŠ” λ¬Έμžμ—΄ argv[0]
    은 ν”„λ‘œκ·Έλž¨ 이름 을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. argv[0][0]ν”„λ‘œκ·Έλž¨ 이름을 호슀트 ν™˜κ²½μ—μ„œ μ‚¬μš©ν•  μˆ˜μ—†λŠ” 경우 널 문자 μ—¬μ•Όν•©λ‹ˆλ‹€. 의 κ°’ argc이 1보닀 크면, argv[1]톡해 μ§€μ •λœ λ¬Έμžμ—΄ argv[argc-1]
    은 ν”„λ‘œκ·Έλž¨ 맀개 λ³€μˆ˜ λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μ–΄λ ˆμ΄κ°€ κ°€λ¦¬ν‚€λŠ” νŒŒλΌλ―Έν„° argc및 argvλ¬Έμžμ—΄μ€ argvν”„λ‘œκ·Έλž¨μ— μ˜ν•΄ μˆ˜μ • κ°€λŠ₯ν•΄μ•Όν•˜λ©° ν”„λ‘œκ·Έλž¨ μ‹œμž‘κ³Ό ν”„λ‘œκ·Έλž¨ μ’…λ£Œ 사이에 λ§ˆμ§€λ§‰μœΌλ‘œ μ €μž₯된 값을 μœ μ§€ν•΄μ•Όν•©λ‹ˆλ‹€.

10) λ”°λΌμ„œ int둜 μ •μ˜ 된 typedef μ΄λ¦„μœΌλ‘œ λŒ€μ²΄ intν•˜κ±°λ‚˜ μœ ν˜•μ„ argv둜 char **argvλ“± 으둜 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€
.

C99 λ˜λŠ” C11의 ν”„λ‘œκ·Έλž¨ μ’…λ£Œ

μ—μ„œ λ°˜ν™˜ 된 κ°’ main()은 κ΅¬ν˜„ μ •μ˜ λ°©μ‹μœΌλ‘œ β€˜ν™˜κ²½β€™μœΌλ‘œ μ „μ†‘λ©λ‹ˆλ‹€.

5.1.2.2.3 ν”„λ‘œκ·Έλž¨ μ’…λ£Œ

1 mainν•¨μˆ˜ 의 리턴 μœ ν˜•μ΄ 와 ν˜Έν™˜λ˜λŠ” μœ ν˜• int인 경우, 초기 mainν˜ΈμΆœμ—μ„œ exitν•¨μˆ˜λ‘œμ˜ 리턴은 mainν•¨μˆ˜κ°€ 리턴 ν•œ 값을 인수둜 μ‚¬μš© ν•˜μ—¬ ν•¨μˆ˜ λ₯Ό ν˜ΈμΆœν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€ . 11)} μ’…λ£Œ
에 λ„λ‹¬ν•˜λ©΄ mainν•¨μˆ˜κ°€ κ°’ 0을 λ¦¬ν„΄ν•©λ‹ˆλ‹€. 리턴 μœ ν˜•μ΄μ™€ ν˜Έν™˜λ˜μ§€ μ•ŠμœΌλ©΄ int호슀트 ν™˜κ²½μœΌλ‘œ λ¦¬ν„΄λ˜λŠ” μ’…λ£Œ μƒνƒœλŠ” μ§€μ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

11) 6.2.4에 따라, μžλ™ μ €μž₯ 기간이 μ„ μ–Έ 된 객체의 수λͺ…은 main
μ „μžμ˜ κ²½μš°μ—λŠ” μ—†μ—ˆμ§€λ§Œ, μ „μžμ˜ κ²½μš°μ—λŠ” 끝났닀.

μ°Έκ³  0β€˜μ„±κ³΅β€™μœΌλ‘œ μ˜λ¬΄ν™”λœλ‹€. 원할 경우 EXIT_FAILUREand EXIT_SUCCESSλ₯Ό μ‚¬μš©ν•  수 <stdlib.h>μžˆμ§€λ§Œ 0은 잘 μ„€μ •λ˜μ–΄ 있으며 1도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. μ°Έμ‘° 255보닀 큰 μ’…λ£Œ μ½”λ“œ-κ°€λŠ₯ν•©λ‹ˆκΉŒ? .

C89 (및 Microsoft C)μ—μ„œλŠ” main()ν•¨μˆ˜κ°€ λ¦¬ν„΄ν•˜μ§€λ§Œ 리턴 값을 μ§€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ μ–΄λ–»κ²Œλ˜λŠ”μ§€μ— λŒ€ν•œ μ„€λͺ…이 μ—†μŠ΅λ‹ˆλ‹€ . κ·ΈλŸ¬λ―€λ‘œ 그것은 μ •μ˜λ˜μ§€ μ•Šμ€ ν–‰λ™μœΌλ‘œ 이어진닀.

7.22.4.4 exitκΈ°λŠ₯

ΒΆ5 λ§ˆμ§€λ§‰μœΌλ‘œ μ œμ–΄λŠ” 호슀트 ν™˜κ²½μœΌλ‘œ λŒμ•„κ°‘λ‹ˆλ‹€. 의 κ°’ status이 0 λ˜λŠ” 인 EXIT_SUCCESS경우, κ΅¬ν˜„ 성곡 μƒνƒœμ˜ κ΅¬ν˜„ μ •μ˜ 양식 이 λ¦¬ν„΄λ©λ‹ˆλ‹€. 의 κ°’ status이 EXIT_FAILURE인 경우 κ΅¬ν˜„μ΄ μ •μ˜ν•œ μƒνƒœ μ‹€νŒ¨ μƒνƒœμ˜ μ’…λ£Œ κ°€ λ°˜ν™˜λ©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ λ°˜ν™˜ 된 μƒνƒœλŠ” κ΅¬ν˜„ μ •μ˜μž…λ‹ˆλ‹€.

ν‘œμ€€ C ++ β€” ν˜ΈμŠ€νŒ… ν™˜κ²½

C ++ 11 ν‘œμ€€ (ISO / IEC 14882 : 2011)은 λ‹€μŒκ³Ό 같이 λ§ν•©λ‹ˆλ‹€.

3.6.1 μ£Όμš” κΈ°λŠ₯ [basic.start.main]

ΒΆ1 ν”„λ‘œκ·Έλž¨μ€ mainμ΄λΌλŠ” κΈ€λ‘œλ²Œ κΈ°λŠ₯을 ν¬ν•¨ν•΄μ•Όν•˜λ©°, ν”„λ‘œκ·Έλž¨μ˜ μ§€μ •λœ μ‹œμž‘μž…λ‹ˆλ‹€. […]

ΒΆ2 κ΅¬ν˜„μ€ μ£Όμš” κΈ°λŠ₯을 미리 μ •μ˜ν•˜μ§€ μ•Šμ•„μ•Όν•œλ‹€. 이 κΈ°λŠ₯은 κ³ΌλΆ€ν•˜λ˜μ§€ μ•Šμ•„μ•Όν•œλ‹€. int νƒ€μž…μ˜ 리턴 νƒ€μž…μ„ κ°€μ Έμ•Όν•˜μ§€λ§Œ 그렇지 μ•ŠμœΌλ©΄ νƒ€μž…μ΄ κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€. λͺ¨λ“  κ΅¬ν˜„μ€ λ‹€μŒ main μ •μ˜λ₯Ό λͺ¨λ‘ ν—ˆμš©ν•΄μ•Όν•©λ‹ˆλ‹€.

int main() { /* ... */ }

κ³Ό

int main(int argc, char* argv[]) { /* ... */ }

ν›„μžμ˜ ν˜•μ‹ argc은 ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” ν™˜κ²½μ—μ„œ ν”„λ‘œκ·Έλž¨μ— 전달 된 인수의 μˆ˜μž…λ‹ˆλ‹€. 경우 argcμ΄λŸ¬ν•œ 인수λ₯Ό κ³΅κΈ‰ν•΄μ•Όν•œλ‹€ 제둜 μ΄μ™Έμ˜ argv[0]
λ₯Ό 톡해 argv[argc-1]널 (null)둜 μ’…λ£Œλ˜λŠ” λ©€ν‹° λ°”μ΄νŠΈ λ¬Έμžμ—΄μ˜ 첫 문자 (NTMBSs) (17.5.2.1.4.2)에 λŒ€ν•œ ν¬μΈν„°λ‘œμ™€ argv[0]ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” 이름을 λ‚˜νƒ€λ‚΄λŠ” NTMBS의 초기 λ¬Έμžμ— λŒ€ν•œ ν¬μΈν„°ν•œλ‹€ ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•˜μ‹­μ‹œμ˜€ "". 의 값은 argcμŒμˆ˜κ°€ μ•„λ‹ˆμ–΄μ•Όν•œλ‹€. 의 값은 argv[argc]
0μ΄μ–΄μ•Όν•œλ‹€. [μ°Έκ³  : 이후에 (선택적) νŒŒλΌλ―Έν„°λ₯Ό 더 μΆ”κ°€ ν•  것을 ꢌμž₯ν•œλ‹€ argv. β€” 끝 λ…ΈνŠΈ]

ΒΆ3 κΈ°λŠ₯ main은 ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ μ‚¬μš©λ˜μ§€ μ•Šμ•„μ•Όν•©λ‹ˆλ‹€. 연계 (3.5) mainλŠ” κ΅¬ν˜„μ— 따라 μ •μ˜λ©λ‹ˆλ‹€. […]

ΒΆ5 main의 return 문은 main ν•¨μˆ˜λ₯Ό λ– λ‚˜κ³  (μžλ™ μ €μž₯ μ‹œκ°„μ΄μžˆλŠ” 객체λ₯Ό 파괴 함) std::exitreturn 값을 인수둜 호좜 ν•˜λŠ” νš¨κ³Όκ°€ μžˆμŠ΅λ‹ˆλ‹€. 리턴 문이 λ°œμƒν•˜μ§€ μ•Šκ³  μ œμ–΄κ°€ λ©”μΈμ˜ 끝에 λ„λ‹¬ν•˜λ©΄ κ·Έ κ²°κ³ΌλŠ” μ‹€ν–‰μ˜ νš¨κ³Όμž…λ‹ˆλ‹€

return 0;

C ++ ν‘œμ€€μ€ λͺ…μ‹œ 적으둜 β€œ[μ£Ό ν•¨μˆ˜]λŠ” μœ ν˜•μ˜ 리턴 μœ ν˜•μ„ κ°€μ Έμ•Ό intν•˜μ§€λ§Œ 그렇지 μ•Šμ€ 경우 μœ ν˜•μ΄ κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€β€λΌκ³  λͺ…μ‹œν•˜κ³  C ν‘œμ€€κ³Ό λ™μΌν•œ 두 μ„œλͺ…을 μ˜΅μ…˜μœΌλ‘œ μ§€μ›ν•΄μ•Όν•©λ‹ˆλ‹€. λ”°λΌμ„œ β€˜void main ()’은 C ++ ν‘œμ€€μ—μ„œ 직접 ν—ˆμš©λ˜μ§€ μ•Šμ§€λ§Œ λŒ€μ•ˆμ„ ν—ˆμš©ν•˜λŠ” λΉ„ν‘œμ€€ κ΅¬ν˜„μ„ μ€‘μ§€ν•˜λŠ” 방법은 μ—†μŠ΅λ‹ˆλ‹€. C ++λŠ” μ‚¬μš©μžκ°€ 호좜 ν•  main수 μ—†λ„λ‘ν•©λ‹ˆλ‹€ (κ·ΈλŸ¬λ‚˜ C ν‘œμ€€μ€ 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€).

C ++ 11 ν‘œμ€€ μ—λŠ” Β§7.22.4.4의 단락과 λ™μΌν•œ Β§18.5 μ‹œμž‘ 및 μ’…λ£Œ 단락이 μžˆμŠ΅λ‹ˆλ‹€.exit κΈ°λŠ₯ C11 ν‘œμ€€μ—μ„œ (μœ„ 인용)은 (λ”°λ‘œ κ°μ£Όμ—μ„œ, μ΄λŠ” λ‹¨μˆœνžˆ λ¬Έμ„œ κ·Έ EXIT_SUCCESS와 EXIT_FAILUREμ •μ˜ μ—μ„œ <cstdlib>).

ν‘œμ€€ C β€” 곡톡 ν™•μž₯

일반적으둜 Unix μ‹œμŠ€ν…œμ€ μ„Έ 번째 λ³€ν˜•μ„ μ§€μ›ν•©λ‹ˆλ‹€.

int main(int argc, char **argv, char **envp) { ... }

μ„Έ 번째 μΈμˆ˜λŠ” null둜 λλ‚˜λŠ” λ¬Έμžμ—΄μ— λŒ€ν•œ 포인터 λͺ©λ‘μœΌλ‘œ, 각각 이름, λ“±ν˜Έ 및 κ°’ (λΉ„μ–΄μžˆμ„ 수 있음)을 κ°–λŠ” ν™˜κ²½ λ³€μˆ˜μž…λ‹ˆλ‹€. 이것을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ μ—¬μ „νžˆ β€˜ extern char **environ;β€˜ λ₯Ό 톡해 ν™˜κ²½μ— 도달 ν•  수 μžˆμŠ΅λ‹ˆλ‹€ . 이 μ „μ—­ λ³€μˆ˜λŠ”μ΄λ₯Ό μ„ μ–Έν•˜λŠ” 헀더가 μ—†λ‹€λŠ” μ μ—μ„œ POSIX의 고유 λ³€μˆ˜μž…λ‹ˆλ‹€.

μ΄λŠ” C ν‘œμ€€μ— μ˜ν•΄ 뢀둝 J에 λ¬Έμ„œν™”λ˜μ–΄μžˆλŠ” 곡톡 ν™•μž₯λͺ…μœΌλ‘œ μΈμ‹λ©λ‹ˆλ‹€.

J.5.1 ν™˜κ²½ 인수

ΒΆ1 호슀트 된 ν™˜κ²½μ—μ„œ, main ν•¨μˆ˜λŠ” char *envp[]에 λŒ€ν•œ λ„λ‘œ λλ‚˜λŠ” 포인터 배열을 κ°€λ¦¬ν‚€λŠ” μ„Έ 번째 인수λ₯Όλ°›μŠ΅λ‹ˆλ‹€. char각 포인터 λŠ” ν”„λ‘œκ·Έλž¨μ˜μ΄ μ‹€ν–‰μ„μœ„ν•œ ν™˜κ²½μ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•˜λŠ” λ¬Έμžμ—΄μ„ 가리 ν‚΅λ‹ˆλ‹€ (5.1. 2.2.1).

마이크둜 μ†Œν”„νŠΈ C

마이크둜 μ†Œν”„νŠΈ VS 2010 μ»΄νŒŒμΌλŸ¬λŠ” ν₯λ―Έ λ‘­λ‹€. μ›Ή μ‚¬μ΄νŠΈλŠ” λ§ν•©λ‹ˆλ‹€ :

main의 μ„ μ–Έ ꡬ문은

 int main();

λ˜λŠ” μ„ νƒμ μœΌλ‘œ

int main(int argc, char *argv[], char *envp[]);

λ˜λŠ” main및 wmainν•¨μˆ˜λ₯Ό λ°˜ν™˜μœΌλ‘œ μ„ μ–Έ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ void(λ°˜ν™˜ κ°’ μ—†μŒ). void λ₯Ό μ„ μ–Έ mainν•˜κ±°λ‚˜ wmainλ¦¬ν„΄ν•˜λ©΄ return 문을 μ‚¬μš©ν•˜μ—¬ μ’…λ£Œ μ½”λ“œλ₯Ό μƒμœ„ ν”„λ‘œμ„ΈμŠ€ λ˜λŠ” 운영 μ²΄μ œμ— 리턴 ν•  수 μ—†μŠ΅λ‹ˆλ‹€. mainλ˜λŠ” wmain둜 μ„ μ–Έ λ˜μ—ˆμ„ λ•Œ μ’…λ£Œ μ½”λ“œλ₯Ό λ°˜ν™˜ν•˜λ €λ©΄ ν•¨μˆ˜ voidλ₯Ό μ‚¬μš©ν•΄μ•Όν•©λ‹ˆλ‹€ exit.

ν”„λ‘œκ·Έλž¨ void main()이 μ’…λ£Œ 될 λ•Œ μ–΄λ–€ κ²°κ³Όκ°€ λ°œμƒν•˜λŠ”μ§€ (λΆ€λͺ¨ λ˜λŠ” OS에 μ–΄λ–€ μ’…λ£Œ μ½”λ“œκ°€ λ°˜ν™˜λ˜λŠ”μ§€) λͺ…ν™•ν•˜μ§€ μ•ŠμœΌλ©° MS μ›Ή μ‚¬μ΄νŠΈλ„ μžλ™μž…λ‹ˆλ‹€.

ν₯λ―Έλ‘­κ²Œλ„ MSλŠ” main()C 및 C ++ ν‘œμ€€μ— ν•„μš”ν•œ 두 가지 인수 버전을 κ·œμ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ . char **envpν™˜κ²½ λ³€μˆ˜ λͺ©λ‘μ— λŒ€ν•œ 포인터 인 μ„Έ 번째 μΈμˆ˜κ°€μžˆλŠ” μ„Έ 가지 인수 ν˜•μ‹ 만 κ·œμ • ν•©λ‹ˆλ‹€.

Microsoft νŽ˜μ΄μ§€μ—λŠ” λ‹€λ₯Έ λŒ€μ•ˆλ„ μžˆμŠ΅λ‹ˆλ‹€. wmain() 이 방법은 넓은 λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜λ©° κ·Έ μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€ 의 Microsoft Visual Studio 2005 버전은 λŒ€μ•ˆμœΌλ‘œ λ‚˜μ—΄λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ . λ²„μ „μ˜ 마이크둜 μ†Œν”„νŠΈ λΉ„μ£Όμ–Ό μŠ€νŠœλ””μ˜€ 2008 λ…„ 이후 μ•ŠμŠ΅λ‹ˆλ‹€.void main()

ν‘œμ€€ C β€” λ…λ¦½ν˜• ν™˜κ²½

μ•žμ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ μœ„μ˜ μš”κ΅¬ 사항은 ν˜ΈμŠ€νŒ… 된 ν™˜κ²½μ— μ μš©λ©λ‹ˆλ‹€. 독립 ν™˜κ²½ (호슀트 ν™˜κ²½μ˜ λŒ€μ•ˆ)으둜 μž‘μ—…ν•˜λŠ” 경우 ν‘œμ€€μ— λŒ€ν•œ 언급이 훨씬 μ μŠ΅λ‹ˆλ‹€. λ…λ¦½ν˜• ν™˜κ²½μ˜ 경우 ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ 호좜 된 ν•¨μˆ˜λ₯Ό 호좜 ν•  ν•„μš” mainκ°€ μ—†μœΌλ©° 리턴 μœ ν˜•μ— λŒ€ν•œ μ œν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€. ν‘œμ€€μ€ λ§ν•œλ‹€ :

5.1.2 μ‹€ν–‰ ν™˜κ²½

λ…λ¦½ν˜• 및 ν˜ΈμŠ€νŒ…μ˜ 두 가지 μ‹€ν–‰ ν™˜κ²½μ΄ μ •μ˜λ©λ‹ˆλ‹€. 두 경우 λͺ¨λ‘, μ§€μ •λœ C ν•¨μˆ˜κ°€ μ‹€ν–‰ ν™˜κ²½μ— μ˜ν•΄ 호좜 될 λ•Œ ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ΄ λ°œμƒν•©λ‹ˆλ‹€. 정적 μ €μž₯ 기간을 가진 λͺ¨λ“  κ°μ²΄λŠ” ν”„λ‘œκ·Έλž¨ μ‹œμž‘ 전에 μ΄ˆκΈ°ν™”λ˜μ–΄μ•Όν•©λ‹ˆλ‹€ (초기 κ°’μœΌλ‘œ μ„€μ •). κ·ΈλŸ¬ν•œ μ΄ˆκΈ°ν™”μ˜ 방식 및 타이밍은 달리 λͺ…μ‹œλ˜μ§€ μ•ŠλŠ”λ‹€. ν”„λ‘œκ·Έλž¨ μ’…λ£ŒλŠ” μ œμ–΄λ₯Ό μ‹€ν–‰ ν™˜κ²½μœΌλ‘œ λ˜λŒλ¦½λ‹ˆλ‹€.

5.1.2.1 독립 ν™˜κ²½

C ν™˜κ²½μ—μ„œ 운영 체제의 이점없이 C ν”„λ‘œκ·Έλž¨μ΄ 싀행될 μˆ˜μžˆλŠ” 독립 ν™˜κ²½μ—μ„œλŠ” ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ˜ 이름과 μœ ν˜•μ΄ κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€. μ‘°ν•­ 4에 μ˜ν•΄ μš”κ΅¬λ˜λŠ” μ΅œμ†Œ μ„ΈνŠΈ μ΄μ™Έμ˜ 독립 ν”„λ‘œκ·Έλž¨μ— 이용 κ°€λŠ₯ν•œ λͺ¨λ“  λ„μ„œκ΄€ μ‹œμ„€μ€ κ΅¬ν˜„μ— 따라 μ •μ˜λ©λ‹ˆλ‹€.

독립 ν™˜κ²½μ—μ„œ ν”„λ‘œκ·Έλž¨ μ’…λ£Œμ˜ 영ν–₯은 κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€.

μ‘°ν•­ 4 적합성에 λŒ€ν•œ μƒν˜Έ μ°Έμ‘°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

ΒΆ5 μ—„κ²©ν•˜κ²Œ μ€€μˆ˜ν•˜λŠ” ν”„λ‘œκ·Έλž¨ 은이 ꡭ제 ν‘œμ€€μ— λͺ…μ‹œλœ μ–Έμ–΄ 및 라이브러리의 κΈ°λŠ₯ 만 μ‚¬μš©ν•΄μ•Όν•©λ‹ˆλ‹€. 3) μ§€μ •λ˜μ§€ μ•Šκ±°λ‚˜ μ •μ˜λ˜μ§€ μ•Šμ€ λ˜λŠ” κ΅¬ν˜„ μ •μ˜ 된 λ™μž‘μ— 따라 좜λ ₯을 μƒμ„±ν•˜μ§€ μ•Šμ•„μ•Όν•˜λ©° μ΅œμ†Œ κ΅¬ν˜„ μ œν•œμ„ μ΄ˆκ³Όν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€.

ΒΆ6 μ€€μˆ˜ κ΅¬ν˜„μ˜ 두 가지 ν˜•νƒœλŠ” ν˜ΈμŠ€νŒ… 되고 λ…λ¦½ν˜• μž…λ‹ˆλ‹€. μ€€μˆ˜ ν˜ΈμŠ€νŒ… κ΅¬ν˜„μ€ μ–΄λ–€ μ—„κ²©ν•˜κ²Œ μ€€μˆ˜ ν”„λ‘œκ·Έλž¨μ„ μˆ˜μš©ν•˜μ—¬μ•Όν•œλ‹€. μ€€μˆ˜ 자립 κ΅¬ν˜„ 라이브러리 절 (7 절)에 μ§€μ •λœ κΈ°λŠ₯의 μ‚¬μš©μ΄ ν‘œμ€€ ν—€λ”μ˜ λ‚΄μš©μ— κ΅­ν•œλ˜λŠ” λͺ¨λ“  μ—„κ²©νžˆ μ€€μˆ˜ ν”„λ‘œκ·Έλž¨μ„ μˆ˜μš©ν•˜μ—¬μ•Όν•œλ‹€ <float.h>, <iso646.h>, <limits.h>, <stdalign.h>,
<stdarg.h>, <stdbool.h>, <stddef.h>, <stdint.h>,와
<stdnoreturn.h>. μ ν•©ν•œ κ΅¬ν˜„μ€ μ—„κ²©ν•˜κ²Œ μ€€μˆ˜ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ„ λ³€κ²½ν•˜μ§€ μ•ŠλŠ” ν•œ ν™•μž₯ (μΆ”κ°€ 라이브러리 κΈ°λŠ₯ 포함)을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 4)

ΒΆ7 μ€€μˆ˜ ν”„λ‘œκ·Έλž¨ 은 μ€€μˆ˜ κ΅¬ν˜„μ— ν—ˆμš©λ˜λŠ” ν”„λ‘œκ·Έλž¨ μž…λ‹ˆλ‹€. 5)

3) μ—„κ²©ν•˜κ²Œ μ€€μˆ˜ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ€ κ΄€λ ¨ 맀크둜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ μ ˆν•œ 쑰건뢀 포함 μ „μ²˜λ¦¬ μ§€μ‹œλ¬Έμ— μ˜ν•΄ λ³΄ν˜Έλ˜λŠ” 경우 쑰건뢀 κΈ°λŠ₯ (6.10.8.3 μ°Έμ‘°)을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

#ifdef __STDC_IEC_559__ /* FE_UPWARD defined */
    /* ... */
    fesetround(FE_UPWARD);
    /* ... */
#endif

4) μ΄λŠ” μ ν•©ν•œ κ΅¬ν˜„μ΄μ΄ ꡭ제 ν‘œμ€€μ— λͺ…μ‹œ 적으둜 μ˜ˆμ•½ 된 μ‹λ³„μž μ΄μ™Έμ˜ μ‹λ³„μžλ₯Ό λ³΄μœ ν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

5) μ—„κ²©ν•˜κ²Œ μ ν•©ν•œ ν”„λ‘œκ·Έλž¨μ€ μ ν•©ν•œ κ΅¬ν˜„ μ€‘μ—μ„œ μ΅œλŒ€ν•œ 이식성을 갖도둝 κ³ μ•ˆλ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ ν•©ν•œ ν”„λ‘œκ·Έλž¨μ€ μ ν•©ν•œ κ΅¬ν˜„μ˜ 이식 λΆˆκ°€λŠ₯ν•œ κΈ°λŠ₯에 따라 λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹€μ œλ‘œ λͺ¨λ“  κΈ°λŠ₯을 μ •μ˜ν•˜λŠ” λ…λ¦½ν˜• ν™˜κ²½μ— ν•„μš”ν•œ μœ μΌν•œ ν—€λ”λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. <stdarg.h> (단지 맀크둜 일 μˆ˜λ„ 있고 μ’…μ’… 맀크둜 일 μˆ˜λ„ 있음 .

ν‘œμ€€ C ++ β€” λ…λ¦½ν˜• ν™˜κ²½

C ν‘œμ€€μ΄ ν˜ΈμŠ€νŒ… ν™˜κ²½κ³Ό 독립 ν™˜κ²½μ„ λͺ¨λ‘ μΈμ‹ν•˜λŠ” κ²ƒμ²˜λŸΌ C ++ ν‘œμ€€λ„ μΈμ‹ν•©λ‹ˆλ‹€. (ISO / IEC 14882 : 2011의 인용문)

1.4 κ΅¬ν˜„ μ€€μˆ˜ [intro.compliance]

ΒΆ7 두 가지 μ’…λ₯˜μ˜ κ΅¬ν˜„μ΄ μ •μ˜λ˜μ–΄μžˆλ‹€ : ν˜ΈμŠ€νŒ… κ΅¬ν˜„ κ³Ό 독립 κ΅¬ν˜„ . ν˜ΈμŠ€νŒ… 된 κ΅¬ν˜„μ˜ 경우이 ꡭ제 ν‘œμ€€μ€ μ‚¬μš© κ°€λŠ₯ν•œ 라이브러리 μ„ΈνŠΈλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. 독립 μ‹€ν–‰ ν˜• κ΅¬ν˜„μ€ 운영 체제의 이점없이 μ‹€ν–‰ν•  수 있으며 νŠΉμ • μ–Έμ–΄ 지원 라이브러리 (17.6.1.3)λ₯Ό ν¬ν•¨ν•˜λŠ” κ΅¬ν˜„ μ •μ˜ 라이브러리 μ„ΈνŠΈλ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.

ΒΆ8 μ ν•©ν•œ κ΅¬ν˜„μ€ μ˜¬λ°”λ₯Έ ν˜•μ‹μ˜ ν”„λ‘œκ·Έλž¨μ˜ λ™μž‘μ„ λ³€κ²½ν•˜μ§€ μ•ŠλŠ” ν•œ ν™•μž₯ κΈ°λŠ₯ (μΆ”κ°€ 라이브러리 κΈ°λŠ₯ 포함)을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 ꡭ제 ν‘œμ€€μ— 따라 잘λͺ»λœ ν™•μž₯을 μ‚¬μš©ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ§„λ‹¨ν•˜λ €λ©΄ κ΅¬ν˜„μ΄ ν•„μš”ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κ·Έλ ‡κ²Œν•˜λ©΄ κ·ΈλŸ¬ν•œ ν”„λ‘œκ·Έλž¨μ„ μ»΄νŒŒμΌν•˜κ³  μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ΒΆ9 각 κ΅¬ν˜„μ€ μ§€μ›ν•˜μ§€ μ•ŠλŠ” λͺ¨λ“  쑰건뢀 지원 ꡬ성을 μ‹λ³„ν•˜κ³  λͺ¨λ“  λ‘œμΌ€μΌ νŠΉμ • νŠΉμ„±μ„ μ •μ˜ν•˜λŠ” λ¬Έμ„œλ₯Ό ν¬ν•¨ν•΄μ•Όν•©λ‹ˆλ‹€. μ‚Ό

3) 이 λ¬Έμ„œλŠ” λ˜ν•œ κ΅¬ν˜„ μ •μ˜ λ™μž‘μ„ μ •μ˜ν•©λ‹ˆλ‹€. 1.9 μ°Έμ‘°

17.6.1.3 독립 μ‹€ν–‰ ν˜• κ΅¬ν˜„ [κ·œμ • μ€€μˆ˜]

ν˜ΈμŠ€νŒ… 및 독립 μ‹€ν–‰ ν˜• (1.4)의 두 가지 κ΅¬ν˜„μ΄ μ •μ˜λ©λ‹ˆλ‹€. ν˜ΈμŠ€νŒ… 된 κ΅¬ν˜„μ˜ 경우이 ꡭ제 ν‘œμ€€μ€ μ‚¬μš© κ°€λŠ₯ν•œ 헀더 μ„ΈνŠΈλ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.

독립 κ΅¬ν˜„μ—λŠ” κ΅¬ν˜„ μ •μ˜ 헀더 μ„ΈνŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이 μ„ΈνŠΈλŠ” μ΅œμ†Œν•œ ν‘œ 16에 ν‘œμ‹œλœ 헀더λ₯Ό ν¬ν•¨ν•΄μ•Όν•œλ‹€.

헀더 제곡된 버전 <cstdlib>을 μ„ μ–Έν•œλ‹€ 적어도 ν•¨μˆ˜ abort, atexit, at_quick_exit, exit, 및 quick_exit(18.5). 이 ν‘œμ— λ‚˜μ—΄λœ λ‹€λ₯Έ ν—€λ”λŠ” ν˜ΈμŠ€νŒ… 된 κ΅¬ν˜„κ³Ό λ™μΌν•œ μš”κ΅¬ 사항을 μΆ©μ‘±ν•΄μ•Όν•©λ‹ˆλ‹€.

ν‘œ 16 β€” λ…λ¦½ν˜• κ΅¬ν˜„μ„μœ„ν•œ C ++ 헀더

Subclause                           Header(s)
                                    <ciso646>
18.2  Types                         <cstddef>
18.3  Implementation properties     <cfloat> <limits> <climits>
18.4  Integer types                 <cstdint>
18.5  Start and termination         <cstdlib>
18.6  Dynamic memory management     <new>
18.7  Type identification           <typeinfo>
18.8  Exception handling            <exception>
18.9  Initializer lists             <initializer_list>
18.10 Other runtime support         <cstdalign> <cstdarg> <cstdbool>
20.9  Type traits                   <type_traits>
29    Atomics                       <atomic>

int main()Cμ—μ„œ μ‚¬μš©ν•˜λŠ” 것은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ?

C11 ν‘œμ€€ μ‡Όμ˜ ν‘œμ€€ Β§5.1.2.2.1 μ„ ν˜Έν•˜λŠ” ν‘œκΈ°λ²• –  int main(void)-ν•˜μ§€λ§Œ 보여 ν‘œμ€€μ˜ 두 μ˜ˆμ œλ„ μžˆμŠ΅λ‹ˆλ‹€ int main(): Β§6.5.3.4 ΒΆ8 및 Β§6.7.6.3 ΒΆ20 . 이제 μ˜ˆμ œλŠ” β€˜κ·œλ²” 적’이 μ•„λ‹ˆλΌλŠ” 점에 μœ μ˜ν•΄μ•Όν•©λ‹ˆλ‹€. 그듀은 단지 μ˜ˆμ‹œ 일 뿐이닀. μ˜ˆμ œμ— 버그가 있으면 ν‘œμ€€ 본문에 직접 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 즉, μ˜ˆμƒλ˜λŠ” λ™μž‘μ„ κ°•λ ₯ν•˜κ²Œ λ‚˜νƒ€λ‚΄λ―€λ‘œ ν‘œμ€€ int main()에 μ˜ˆμ œκ°€ 포함 λ˜μ–΄ int main()있으면 μ„ ν˜Έ ν‘œκΈ°λ²•μ΄ μ•„λ‹ˆλ”λΌλ„ κΈˆμ§€λ˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

6.5.3.4 sizeof및 _Alignofμ—°μ‚°μž

…

ΒΆ8 예 3이 μ˜ˆμ—μ„œ, κ°€λ³€ 길이 λ°°μ—΄μ˜ ν¬κΈ°λŠ” κ³„μ‚°λ˜μ–΄ ν•¨μˆ˜μ—μ„œ λ°˜ν™˜λ©λ‹ˆλ‹€.

#include <stddef.h>

size_t fsize3(int n)
{
    char b[n+3]; // variable length array
    return sizeof b; // execution time sizeof
}
int main()
{
    size_t size;
    size = fsize3(10); // fsize3 returns 13
    return 0;
}

λ‹΅λ³€

λ‚˜λŠ” λ˜λŠ” main()쀑 ν•˜λ‚˜λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ . 그듀은에 μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€EXIT_SUCCESSEXIT_FAILUREstdlib.h


λ‹΅λ³€

C 및 C ++ ν‘œμ€€μ€ λ…λ¦½ν˜• 및 ν˜ΈμŠ€νŒ…μ˜ 두 가지 κ΅¬ν˜„ μœ ν˜•μ„ μ •μ˜ν•©λ‹ˆλ‹€.

  • C90 ν˜ΈμŠ€νŒ… ν™˜κ²½

    ν—ˆμš©λ˜λŠ” 양식 1 :

    int main (void)
    int main (int argc, char *argv[])
    
    main (void)
    main (int argc, char *argv[])
    /*... etc, similar forms with implicit int */

    μ½”λ©˜νŠΈ:

    μ•žμ˜ 두 κ°œλŠ” ν—ˆμš© 된 ν˜•μ‹μœΌλ‘œ λͺ…μ‹œ 적으둜 μ–ΈκΈ‰λ˜μ–΄ 있으며, C90은 리턴 μœ ν˜• 및 ν•¨μˆ˜ 맀개 λ³€μˆ˜μ— β€œimplicit int”λ₯Ό ν—ˆμš©ν–ˆκΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ 것은 λ‚΄μž¬μ μœΌλ‘œ ν—ˆμš©λ©λ‹ˆλ‹€. λ‹€λ₯Έ ν˜•μ‹μ€ ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • C90 λ…λ¦½ν˜• ν™˜κ²½

    main의 λͺ¨λ“  ν˜•μ‹ λ˜λŠ” 이름이 ν—ˆμš©λ©λ‹ˆλ‹€ 2 .

  • C99 ν˜ΈμŠ€νŒ… ν™˜κ²½

    ν—ˆμš©λ˜λŠ” 양식 3 :

    int main (void)
    int main (int argc, char *argv[])
    /* or in some other implementation-defined manner. */

    μ½”λ©˜νŠΈ:

    C99κ°€ β€œimplicit int”λ₯Ό 제거 ν–ˆμœΌλ―€λ‘œ main()더 이상 μœ νš¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    β€œλ˜λŠ” λ‹€λ₯Έ κ΅¬ν˜„ μ •μ˜ λ°©μ‹μœΌλ‘œβ€μ΄μƒν•œ, λͺ¨ν˜Έν•œ λ¬Έμž₯이 μ†Œκ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” ” int main()λ‹€μ–‘ν•œ 맀개 λ³€μˆ˜ β€œλ˜λŠ” β€œmain이 κ΅¬ν˜„ μ •μ˜ ν˜•μ‹μ„ κ°€μ§ˆ 수 μžˆμŒβ€ 으둜 해석 될 수 μžˆμŠ΅λ‹ˆλ‹€.

    일뢀 μ»΄νŒŒμΌλŸ¬λŠ” ν›„μžμ˜ λ°©μ‹μœΌλ‘œ ν‘œμ€€μ„ ν•΄μ„ν•˜κΈ°λ‘œ μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€. μ˜μ‹¬ ν•  여지없이, ν‘œμ€€ μžμ²΄κ°€ λͺ¨ν˜Έν•˜κΈ° λ•Œλ¬Έμ— ν‘œμ€€ 자체λ₯Ό μΈμš©ν•˜μ—¬ μ—„κ²©ν•˜κ²Œ μ€€μˆ˜ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  μ‰½κ²Œ 말할 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

    κ·ΈλŸ¬λ‚˜ μ™„μ „νžˆ 거친 ν˜•νƒœλ₯Ό ν—ˆμš©ν•œλ‹€λŠ” main()것은 μ•„λ§ˆλ„μ΄ μƒˆλ‘œμš΄ λ¬Έμž₯의 μ˜λ„κ°€ μ•„λ‹ˆμ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€. C99의 이둠적 κ·Όκ±° (κ·œλ²”μ΄ μ•„λ‹˜)λŠ” λ¬Έμž₯이 int main 4에 λŒ€ν•œ μΆ”κ°€ 맀개 λ³€μˆ˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€ .

    κ·ΈλŸ¬λ‚˜ 호슀트 된 ν™˜κ²½ ν”„λ‘œκ·Έλž¨ μ’…λ£Œ μ„Ήμ…˜μ€ main이 int 5λ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” κ²½μš°μ— λŒ€ν•΄ λ…ΌμŸμ„ κ³„μ†ν•©λ‹ˆλ‹€ . 이 μ„Ήμ…˜μ€ main을 μ„ μ–Έν•˜λŠ” 방법에 λŒ€ν•œ κ·œλ²”μ€ μ•„λ‹ˆμ§€λ§Œ 호슀트 μ‹œμŠ€ν…œμ—μ„œλ„ main이 μ™„μ „νžˆ κ΅¬ν˜„ μ •μ˜ 된 λ°©μ‹μœΌλ‘œ μ„ μ–Έ 될 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

  • C99 λ…λ¦½ν˜• ν™˜κ²½

    main의 λͺ¨λ“  ν˜•μ‹ λ˜λŠ” 이름이 ν—ˆμš©λ©λ‹ˆλ‹€ 6 .

  • C11 ν˜ΈμŠ€νŒ… ν™˜κ²½

    ν—ˆμš© 된 양식 7 :

    int main (void)
    int main (int argc, char *argv[])
    /* or in some other implementation-defined manner. */
  • C11 λ…λ¦½ν˜• ν™˜κ²½

    main의 λͺ¨λ“  ν˜•μ‹ λ˜λŠ” 이름이 ν—ˆμš©λ©λ‹ˆλ‹€ 8 .


μ°Έκ³  int main()μœ„μ˜ 버전 μ€‘μ—μ„œ C의 ν˜ΈμŠ€νŒ… κ΅¬ν˜„μ„μœ„ν•œ μœ νš¨ν•œ ν˜•νƒœλ‘œ λ‚˜μ—΄λ˜μ§€ μ•Šμ•˜λ‹€. Cμ—μ„œ, CλŠ” 달리 ++, ()그리고 (void)λ‹€λ₯Έ 의미λ₯Ό κ°€μ§€κ³ μžˆλ‹€. μ „μžλŠ” μ–Έμ–΄μ—μ„œ 제거 될 μˆ˜μžˆλŠ” 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. C11 ν–₯ν›„ μ–Έμ–΄ μ§€μ‹œ 사항 μ°Έμ‘° :

6.11.6 ν•¨μˆ˜ μ„ μ–Έμž

빈 κ΄„ν˜Έ (ν”„λ‘œν†  νƒ€μž… ν˜•μ‹ 맀개 λ³€μˆ˜ μœ ν˜• μ„ μ–Έμžκ°€ μ•„λ‹˜)와 ν•¨κ»˜ ν•¨μˆ˜ μ„ μ–Έμžλ₯Ό μ‚¬μš©ν•˜λŠ” 것은 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.


  • C ++ 03 ν˜ΈμŠ€νŒ… ν™˜κ²½

    ν—ˆμš©λ˜λŠ” 양식 9 :

    int main ()
    int main (int argc, char *argv[])

    μ½”λ©˜νŠΈ:

    첫 번째 μ–‘μ‹μ˜ 빈 κ΄„ν˜Έμ— μœ μ˜ν•˜μ‹­μ‹œμ˜€. 이 경우 C ++κ³Ό CλŠ” λ‹€λ¦…λ‹ˆλ‹€. C ++μ—μ„œλŠ” ν•¨μˆ˜κ°€ 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Cμ—μ„œλŠ” 맀개 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

  • C ++ 03 독립 ν™˜κ²½

    μ‹œμž‘μ‹œ 호좜 된 ν•¨μˆ˜μ˜ 이름은 κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€. 이름이 μ§€μ •λœ 경우 main()λͺ…μ‹œλœ 양식 10을 λ”°λΌμ•Όν•©λ‹ˆλ‹€ .

    // implementation-defined name, or 
    int main ()
    int main (int argc, char *argv[])
  • C ++ 11 ν˜ΈμŠ€νŒ… ν™˜κ²½

    ν—ˆμš© 된 양식 11 :

    int main ()
    int main (int argc, char *argv[])

    μ½”λ©˜νŠΈ:

    ν‘œμ€€μ˜ ν…μŠ€νŠΈκ°€ λ³€κ²½λ˜μ—ˆμ§€λ§Œ λ™μΌν•œ 의미λ₯Ό κ°–μŠ΅λ‹ˆλ‹€.

  • C ++ 11 독립 ν™˜κ²½

    μ‹œμž‘μ‹œ 호좜 된 ν•¨μˆ˜μ˜ 이름은 κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€. 이름이 μ§€μ •λœ 경우 main()λͺ…μ‹œλœ 양식 12λ₯Ό λ”°λΌμ•Όν•©λ‹ˆλ‹€ .

    // implementation-defined name, or 
    int main ()
    int main (int argc, char *argv[])

μ°Έκ³  λ¬Έν—Œ

  1. ANSI X3.159-1989 2.1.2.2 ν˜ΈμŠ€νŒ… ν™˜κ²½. β€œν”„λ‘œκ·Έλž¨ μ‹œμž‘β€

    ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ ν˜ΈμΆœλ˜λŠ” κΈ°λŠ₯의 이름은 mainμž…λ‹ˆλ‹€. κ΅¬ν˜„μ€μ΄ ν•¨μˆ˜μ— λŒ€ν•œ ν”„λ‘œν†  νƒ€μž…μ„ μ„ μ–Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ°˜ν™˜ μœ ν˜•μ€ int이며 맀개 λ³€μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

    int main(void) { /* ... */ } 

    λ˜λŠ” 두 개의 맀개 λ³€μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€ (μ—¬κΈ°μ„œλŠ” argc 및 argv라고 함). μ„ μ–Έ 된 ν•¨μˆ˜μ— 둜컬이기 λ•Œλ¬Έμ— μ–΄λ–€ 이름이든 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    int main(int argc, char *argv[]) { /* ... */ }
  2. ANSI X3.159-1989 2.1.2.1 독립 ν™˜κ²½ :

    C ν™˜κ²½μ—μ„œ 운영 체제의 이점없이 C ν”„λ‘œκ·Έλž¨μ΄ 싀행될 μˆ˜μžˆλŠ” 독립 ν™˜κ²½μ—μ„œλŠ” ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ˜ 이름과 μœ ν˜•μ΄ κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€.

  3. ISO 9899 : 1999 5.1.2.2 ν˜ΈμŠ€νŒ… ν™˜κ²½-> 5.1.2.2.1 ν”„λ‘œκ·Έλž¨ μ‹œμž‘

    ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ ν˜ΈμΆœλ˜λŠ” κΈ°λŠ₯의 이름은 mainμž…λ‹ˆλ‹€. κ΅¬ν˜„μ€μ΄ ν•¨μˆ˜μ— λŒ€ν•œ ν”„λ‘œν†  νƒ€μž…μ„ μ„ μ–Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ°˜ν™˜ μœ ν˜•μ€ int이며 맀개 λ³€μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

    int main(void) { /* ... */ } 

    λ˜λŠ” 두 개의 맀개 λ³€μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€ (μ—¬κΈ°μ„œλŠ” argc 및 argv라고 함). μ„ μ–Έ 된 ν•¨μˆ˜μ— 둜컬이기 λ•Œλ¬Έμ— μ–΄λ–€ 이름이든 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    int main(int argc, char *argv[]) { /* ... */ }

    λ˜λŠ” λ“±κ°€; 9) λ˜λŠ” λ‹€λ₯Έ κ΅¬ν˜„ μ •μ˜ λ°©μ‹μœΌλ‘œ.

  4. ꡭ제 ν‘œμ€€μ˜ 이둠적 κ·Όκ±° β€” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ β€” C, κ°œμ •νŒ 5.10. 5.1.2.2 ν˜ΈμŠ€νŒ… ν™˜κ²½-> 5.1.2.2.1 ν”„λ‘œκ·Έλž¨ μ‹œμž‘

    main에 λŒ€ν•œ 인수의 λ™μž‘κ³Ό exit, main 및 atexit의 μƒν˜Έ μž‘μš© (Β§7.20.4.2 μ°Έμ‘°)의 λ™μž‘μ€ argv λ¬Έμžμ—΄ ν‘œν˜„κ³Ό main이 λ°˜ν™˜ ν•œ κ°’μ˜ μ˜λ―Έμ—μ„œ μ›ν•˜μ§€ μ•ŠλŠ” 닀양성을 μ–΅μ œν•˜κΈ° μœ„ν•΄ μ²΄κ³„ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

    main에 λŒ€ν•œ 인수둜 argc 및 argvλ₯Ό μ§€μ •ν•˜λ©΄ κ΄‘λ²”μœ„ν•œ 사전 μ—°μŠ΅μ΄ μΈμ‹λ©λ‹ˆλ‹€. argv [argc]λŠ” λͺ©λ‘μ˜ 끝 뢀뢄에 λŒ€ν•œ 쀑볡 검사λ₯Ό μ œκ³΅ν•˜κ³  일반적인 관행에 따라 널 포인터 μ—¬μ•Όν•©λ‹ˆλ‹€.

    main은 0 λ˜λŠ” 2 개의 인수둜 μ„ μ–Έ ν•  μˆ˜μžˆλŠ” μœ μΌν•œ ν•¨μˆ˜μž…λ‹ˆλ‹€. (λ‹€λ₯Έ ν•¨μˆ˜μ˜ 인수 μˆ˜λŠ” 호좜과 μ •μ˜ 사이에 μ •ν™•νžˆ μΌμΉ˜ν•΄μ•Όν•©λ‹ˆλ‹€.)이 νŠΉλ³„ν•œ κ²½μš°λŠ” ν”„λ‘œκ·Έλž¨μ΄ ν”„λ‘œκ·Έλž¨ 인수 λ¬Έμžμ—΄μ— μ•‘μ„ΈμŠ€ν•˜μ§€ μ•Šμ„ λ•Œ 인수λ₯Ό main으둜 남겨 λ‘λŠ” κ΄‘λ²”μœ„ν•œ 관행을 λ‹¨μˆœνžˆ μΈμ‹ν•©λ‹ˆλ‹€. λ§Žμ€ κ΅¬ν˜„λ“€μ΄ μ£Όμš”ν•œ μ£Όμž₯에 λŒ€ν•΄ 두 가지 μ΄μƒμ˜ μ£Όμž₯μ„μ§€μ§€ν•˜μ§€λ§Œ, κ·ΈλŸ¬ν•œ 관행은 ν‘œμ€€μ— μ˜ν•΄ 좕볡 λ°›κ±°λ‚˜ κΈˆμ§€λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ„Έ 개의 인수둜 main을 μ •μ˜ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ€ μ—„κ²©ν•˜κ²Œ μ€€μˆ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ (Β§J.5.1 μ°Έμ‘°).

  5. ISO 9899 : 1999 5.1.2.2 ν˜ΈμŠ€νŒ… ν™˜κ²½-> 5.1.2.2.3 ν”„λ‘œκ·Έλž¨ μ’…λ£Œ

    메인 ν•¨μˆ˜μ˜ 리턴 νƒ€μž… INT와 ν˜Έν™˜λ˜λŠ” ν˜•μ‹μ΄λ©΄, μ£Ό κΈ°λŠ₯에 초기 ν˜ΈμΆœλ‘œλΆ€ν„°μ˜ 볡귀λ₯Ό μΈμˆ˜λ‘œμ„œ 메인 ν•¨μˆ˜μ— μ˜ν•΄ 리턴 된 κ°’κ³Ό μ’…λ£Œ ν•¨μˆ˜ ν˜ΈμΆœν•˜λŠ” 것과; 도달) 11 }것을 μ’…λ£Œ main ν•¨μˆ˜λŠ” κ°’ 0을 λ¦¬ν„΄ν•©λ‹ˆλ‹€. 리턴 μœ ν˜•μ΄ int와 ν˜Έν™˜λ˜μ§€ μ•ŠμœΌλ©΄ 호슀트 ν™˜κ²½μœΌλ‘œ 리턴 된 μ’…λ£Œ μƒνƒœλŠ” μ§€μ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  6. ISO 9899 : 1999 5.1.2.1 λ…λ¦½ν˜• ν™˜κ²½

    C ν™˜κ²½μ—μ„œ 운영 체제의 이점없이 C ν”„λ‘œκ·Έλž¨μ΄ 싀행될 μˆ˜μžˆλŠ” 독립 ν™˜κ²½μ—μ„œλŠ” ν”„λ‘œκ·Έλž¨ μ‹œμž‘μ‹œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ˜ 이름과 μœ ν˜•μ΄ κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€.

  7. ISO 9899 : 2011 5.1.2.2 ν˜ΈμŠ€νŒ… ν™˜κ²½-> 5.1.2.2.1 ν”„λ‘œκ·Έλž¨ μ‹œμž‘

    이 μ„Ήμ…˜μ€ μœ„μ—μ„œ 인용 ν•œ C99와 λ™μΌν•©λ‹ˆλ‹€.

  8. ISO 9899 : 1999 5.1.2.1 λ…λ¦½ν˜• ν™˜κ²½

    이 μ„Ήμ…˜μ€ μœ„μ—μ„œ 인용 ν•œ C99와 λ™μΌν•©λ‹ˆλ‹€.

  9. ISO 14882 : 2003 3.6.1 μ£Όμš” κΈ°λŠ₯

    κ΅¬ν˜„μ΄ μ£Όμš” κΈ°λŠ₯을 미리 μ •μ˜ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. 이 κΈ°λŠ₯은 κ³ΌλΆ€ν•˜λ˜μ§€ μ•Šμ•„μ•Όν•œλ‹€. int μœ ν˜•μ˜ 리턴 μœ ν˜•μ„ κ°€μ Έμ•Όν•˜μ§€λ§Œ 그렇지 μ•ŠμœΌλ©΄ μœ ν˜•μ΄ κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€. λͺ¨λ“  κ΅¬ν˜„μ€ λ‹€μŒκ³Ό 같은 κΈ°λ³Έ μ •μ˜λ₯Ό λͺ¨λ‘ ν—ˆμš©ν•΄μ•Όν•©λ‹ˆλ‹€.

    int main() { /* ... */ }

    κ³Ό

    int main(int argc, char* argv[]) { /* ... */ }
  10. ISO 14882 : 2003 3.6.1 μ£Όμš” κΈ°λŠ₯

    μ£Όμš” κΈ°λŠ₯을 μ •μ˜ν•˜κΈ° μœ„ν•΄ 독립 ν™˜κ²½μ˜ ν”„λ‘œκ·Έλž¨μ΄ ν•„μš”ν•œμ§€ μ—¬λΆ€λŠ” κ΅¬ν˜„ μ •μ˜μž…λ‹ˆλ‹€.

  11. ISO 14882 : 2011 3.6.1 μ£Όμš” κΈ°λŠ₯

    κ΅¬ν˜„μ΄ μ£Όμš” κΈ°λŠ₯을 미리 μ •μ˜ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. 이 κΈ°λŠ₯은 κ³ΌλΆ€ν•˜λ˜μ§€ μ•Šμ•„μ•Όν•œλ‹€. int μœ ν˜•μ˜ 리턴 μœ ν˜•μ„ κ°€μ Έμ•Όν•˜μ§€λ§Œ 그렇지 μ•ŠμœΌλ©΄ μœ ν˜•μ΄ κ΅¬ν˜„ μ •μ˜λ©λ‹ˆλ‹€. λͺ¨λ“  κ΅¬ν˜„μ€ 두 가지λ₯Ό λͺ¨λ‘ ν—ˆμš©ν•΄μ•Όν•œλ‹€

    β€” intλ₯Ό λ°˜ν™˜ν•˜λŠ” () ν•¨μˆ˜

    β€” intλ₯Ό λ°˜ν™˜ν•˜λŠ” (int, char에 λŒ€ν•œ 포인터λ₯Ό κ°€λ¦¬ν‚€λŠ”) ν•¨μˆ˜

    μ£Ό μœ ν˜•μœΌλ‘œ (8.3.5).

  12. ISO 14882 : 2011 3.6.1 μ£Όμš” κΈ°λŠ₯

    이 μ„Ήμ…˜μ€ μœ„μ—μ„œ 인용 ν•œ C ++ 03κ³Ό λ™μΌν•©λ‹ˆλ‹€.


λ‹΅λ³€

μ„±κ³΅ν•˜λ©΄ 0을, μ—λŸ¬λŠ” 0이 μ•„λ‹Œ 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€. 이것은 UNIX 및 DOS μŠ€ν¬λ¦½νŒ…μ—μ„œ ν”„λ‘œκ·Έλž¨μ—μ„œ λ°œμƒν•œ 일을 μ°ΎκΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” ν‘œμ€€μž…λ‹ˆλ‹€.


λ‹΅λ³€

main() C89 및 K & R Cμ—μ„œ μ§€μ •λ˜μ§€ μ•Šμ€ λ°˜ν™˜ μœ ν˜•μ€ 기본적으둜 β€˜int`μž…λ‹ˆλ‹€.

return 1? return 0?
  1. 에 return 문을 쓰지 μ•ŠμœΌλ©΄ int main()λ‹«κΈ° {λŠ” 기본적으둜 0을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

  2. return 0λ˜λŠ” return 1λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ— μ˜ν•΄ μˆ˜μ‹ λ©λ‹ˆλ‹€. μ‰˜μ—μ„œλŠ” μ‰˜ λ³€μˆ˜λ‘œ λ“€μ–΄κ°€κ³  ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜κ³  μ‰˜μ„ μ‚¬μš©ν•˜μ§€ μ•Šκ³  ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄μ˜ λ°˜ν™˜ 값에 λŒ€ν•΄ κ±±μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€ main().

μ£Ό ν•¨μˆ˜κ°€ λ°˜ν™˜ ν•œ 것을 μ–΄λ–»κ²Œ 얻을 수 μžˆμŠ΅λ‹ˆκΉŒ?λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€ . .

$ ./a.out
$ echo $?

μ΄λ ‡κ²Œ $?ν•˜λ©΄ λ°˜ν™˜ κ°’μ˜ μ΅œν•˜μœ„ λ°”μ΄νŠΈλ₯Όλ°›λŠ” λ³€μˆ˜ λΌλŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.main() .

μœ λ‹‰μŠ€ 및 DOS μŠ€ν¬λ¦½νŒ… return 0μ—μ„œ μ„±κ³΅μ‹œ 0이 μ•„λ‹Œ 였λ₯˜κ°€ λ°˜ν™˜λ©λ‹ˆλ‹€. 이것은 μœ λ‹‰μŠ€ 및 DOS μŠ€ν¬λ¦½νŒ…μ—μ„œ ν”„λ‘œκ·Έλž¨μ—μ„œ λ°œμƒν•œ 일을 νŒŒμ•…ν•˜κ³  전체 흐름을 μ œμ–΄ν•˜λŠ” ​​데 μ‚¬μš©λ˜λŠ” ν‘œμ€€μž…λ‹ˆλ‹€.