🎯 컴파일 과정을 μ‚¬μš©ν•˜λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄ 컴파일 기반 μ–Έμ–΄λ₯Ό 톡해 ν”„λ‘œκ·Έλž˜λ°μ˜ κΈ°λ³Έ 원리λ₯Ό μ•Œμ•„λ΄…λ‹ˆλ‹€.


πŸ“— Today I Learned

ν”„λ‘œκ·Έλž˜λ°

κ°œλ°œμžκ°€ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

개발의 3단계 κ³Όμ •

  • ꡬ상
    ν•΄κ²°ν•˜λ €λŠ” 문제λ₯Ό μ •μ˜ν•˜κ³  μš”κ΅¬μ‚¬ν•­μ„ λΆ„μ„ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€.

  • 섀계
    ν”„λ‘œκ·Έλž¨μ˜ ꡬ쑰와 λ™μž‘ 방식을 κ³„νšν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€.

  • κ΅¬ν˜„
    ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μ‹€ν–‰ κ°€λŠ₯ν•œ μ†Œν”„νŠΈμ›¨μ–΄λ‘œ λ§Œλ“œλŠ” λ‹¨κ³„μž…λ‹ˆλ‹€.

    이 κ³Όμ •μ—μ„œ μž‘μ„±λœ μ›μ‹œμ½”λ“œλŠ” 컴파일 과정을 거쳐 κΈ°κ³„μ–΄λ‘œ λ³€ν™˜λ˜λ©°, 이후 링크λ₯Ό 톡해 μ‹€ν–‰ 파일둜 λ§Œλ“€μ–΄μ§‘λ‹ˆλ‹€.




C μ–Έμ–΄

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” 컴퓨터가 μ΄ν•΄ν•˜κ³  μ‹€ν–‰ν•  수 μžˆλ„λ‘ λͺ…령을 μž‘μ„±ν•˜λŠ” μˆ˜λ‹¨μž…λ‹ˆλ‹€. C μ–Έμ–΄λŠ” λŒ€ν‘œμ μΈ 컴파일 μ–Έμ–΄λ‘œ, μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° 전에 컴파일 과정을 거쳐 κΈ°κ³„μ–΄λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.


μ—„κ²©ν•œ 문법

C μ–Έμ–΄λŠ” μ—„κ²©ν•œ 문법 κ·œμΉ™μ„ λ”°λ₯΄λŠ” μ–Έμ–΄μž…λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œμ˜ λͺ…확성을 μœ μ§€ν•˜κ³ , 였λ₯˜λ₯Ό μ΅œμ†Œν™”ν•˜λ©°, μ„±λŠ₯을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•©λ‹ˆλ‹€.

  • μ„Έλ―Έμ½œλ‘ (;)의 μ€‘μš”μ„±
    C μ–Έμ–΄λŠ” μ»΄νŒŒμΌλŸ¬κ°€ λ¬Έμž₯을 μ„Έλ―Έμ½œλ‘ (;) λ‹¨μœ„λ‘œ ν•΄μ„ν•˜λ―€λ‘œ, λ¬Έμž₯의 끝을 λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ λ°˜λ“œμ‹œ μ„Έλ―Έμ½œλ‘ μ„ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€

  • return λ¬Έ
    ν•¨μˆ˜μ˜ 싀행을 μ’…λ£Œν•˜κ³  값을 λ°˜ν™˜ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

    • main ν•¨μˆ˜μ—μ„œ return 0;은 ν”„λ‘œκ·Έλž¨μ΄ μ •μƒμ μœΌλ‘œ μ’…λ£Œλ˜μ—ˆμŒμ„ μš΄μ˜μ²΄μ œμ— μ•Œλ¦¬λŠ” 의미λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

주석문

μ–΄λ–€ λ‹¨μ–΄λ‚˜ λ¬Έμž₯에 λŒ€ν•œ ꡬ체적인 λΆ€μ—° μ„€λͺ…을 ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

  • ν•œ 쀄 주석 : //

  • μ—¬λŸ¬ 쀄 주석 : /* */




λ³€μˆ˜μ™€ μžλ£Œν˜•

λ³€μˆ˜

변경이 κ°€λŠ₯ν•œ 수λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

πŸ€” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

λ©”λͺ¨λ¦¬ 상에 μ‘΄μž¬ν•˜λŠ” μˆ˜λ§Žμ€ λ°μ΄ν„°μ˜ μ£Όμ†Œλ₯Ό 일일이 κΈ°μ–΅ν•˜κΈ° μ–΄λ ΅κΈ° λ•Œλ¬Έμ— μ˜λ―ΈμžˆλŠ” 이름을 λΆ€μ—¬ν•˜μ—¬ μ‰½κ²Œ μ°Έμ‘°ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

마치 친ꡬ의 집을 μ§‘μ£Όμ†Œλ‘œ κΈ°μ–΅ν•˜μ§€ μ•Šκ³ , "μΉ˜λ§Œμ΄λ„€"라고 κΈ°μ–΅ν•˜λŠ” μ›λ¦¬μž…λ‹ˆλ‹€.


λ©”λͺ¨λ¦¬ μ˜μ—­

λ©”λͺ¨λ¦¬λŠ” μ½”λ“œ μ˜μ—­, μŠ€νƒ μ˜μ—­, νž™μ˜μ—­, 데이터 μ˜μ—­μœΌλ‘œ κ΅¬λΆ„λ©λ‹ˆλ‹€.

  • μ½”λ“œ μ˜μ—­ : μ‹€ν–‰ λͺ…령어듀을 μ €μž₯ν•©λ‹ˆλ‹€.

  • μŠ€νƒ μ˜μ—­ : μ§€μ—­ λ³€μˆ˜ 및 맀개 λ³€μˆ˜λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

  • νž™ μ˜μ—­ : ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 직접 ν• λ‹Ήν•©λ‹ˆλ‹€.

  • 데이터 μ˜μ—­ : μ „μ—­ λ³€μˆ˜, static λ³€μˆ˜λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.


데이터 μ €μž₯ ꡬ쑰

  • μ›μ‹œ νƒ€μž… 데이터

    • μ½œμŠ€νƒ λ©”λͺ¨λ¦¬μ— κ°’ 자체λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, int x = 10;μ—μ„œ xλŠ” κ°’ 10을 μ½œμŠ€νƒμ— μ €μž₯ν•©λ‹ˆλ‹€.

    • λ³€μˆ˜μ˜ μ‹λ³„μž(x) μžμ²΄λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μ— μ €μž₯λ©λ‹ˆλ‹€.

    • μƒˆλ‘­κ²Œ μž¬ν• λ‹Ήμ„ ν•˜κ²Œ 되면 μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬λ₯Ό ν™•λ³΄ν•˜μ—¬ 값을 μ €μž₯ν•˜κ³ , μ£Όμ†Œκ°’μ„ κ΅μ²΄ν•˜κ²Œ λ©λ‹ˆλ‹€. μ£Όμ†Œκ°’μ„ μ €μž₯ν•˜λŠ” λ³€μˆ˜λ₯Ό 포인터 λ³€μˆ˜λΌκ³  ν•©λ‹ˆλ‹€.

    • 더 이상 μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” λ°μ΄ν„°λŠ” κ°€λΉ„μ§€ 컬렉터에 μ˜ν•΄ μ μ ˆν•œ μ‹œμ μ— λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œν•©λ‹ˆλ‹€.

  • μ°Έμ‘° νƒ€μž… 데이터

    • νž™ λ©”λͺ¨λ¦¬μ— μ €μž₯된 λ°μ΄ν„°μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

    • μ½œμŠ€νƒμ—λŠ” 이 μ£Όμ†Œκ°’λ§Œ μ €μž₯되고, μ‹€μ œ λ°μ΄ν„°λŠ” νž™ μ˜μ—­μ— μœ„μΉ˜ν•©λ‹ˆλ‹€.

        +----------------------+
        |     p1 (객체)        |
        |   +-----------+      |
        |   | name: "Alice"    |
        |   | age: 30          |
        |   +-----------+      |
        +----------------------+
                 |
                 | μ£Όμ†Œκ°’ (예: 0x7ffee1a8cabc)
                 v
        +----------------------+
        | ptr (포인터)          |
        | 0x7ffee1a8cabc       |
        +----------------------+
                 |
                 v
        +----------------------+
        |   p1의 μ‹€μ œ λ©”λͺ¨λ¦¬    |
        |   +-----------+      |
        |   | name: "Alice"    |
        |   | age: 30          |
        |   +-----------+      |
        +----------------------+



μžλ£Œν˜•

μ„ μ–Έν•œ λ³€μˆ˜κ°€ μ–Όλ§ŒνΌμ˜ λ©”λͺ¨λ¦¬ 곡간을 ν• λ‹Ήν•  것인지λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.

  • μ •μˆ˜ν˜•

    • char : 문자λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

    • short : μ •μˆ˜ν˜• 쀑 μž‘μ€ μ •μˆ˜λ₯Ό μ €μž₯ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

    • int : 일반적인 μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

    • long : μ •μˆ˜ λ²”μœ„κ°€ 큰 값을 μ €μž₯ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

  • μ‹€μˆ˜ν˜•

    • float : 단정도 λΆ€λ™μ†Œμˆ˜μ μœΌλ‘œ, μ†Œμˆ˜μ  μ΄ν•˜ 7자리 μ •λ„μ˜ 정확도λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

    • double : 배정도 λΆ€λ™μ†Œμˆ˜μ μœΌλ‘œ, 더 λ§Žμ€ 정밀도λ₯Ό μš”κ΅¬ν•˜λŠ” 값에 μ‚¬μš©λ©λ‹ˆλ‹€.

    • long double : double보닀 더 높은 정밀도λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ€” μ™œ λ‹€μ–‘ν•œ μžλ£Œν˜•μ„ μ œκ³΅ν•˜λŠ” κ²ƒμΌκΉŒ?

효율적인 λ©”λͺ¨λ¦¬ 곡간을 ν™œμš©ν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€. μŒμ‹μ˜ μ’…λ₯˜μ— 따라 κ·Έλ¦‡μ˜ μš©λ„κ°€ λ‹€λ₯Έ 것과 같은 μ›λ¦¬μž…λ‹ˆλ‹€.




μ‹€μŠ΅ μ½”λ“œ

#include <stdio.h>

int main()
{
    int width = 10;
    int height = 20;
    
    printf("μ‚¬κ°ν˜•μ˜ λ„“μ΄λŠ” %d\n", width * height);
    
    // -------------μ‹€μˆ˜--------------
    
    double area;
    int r = 5;
    
    area = r * r * 3.14;
    
    printf("μ›μ˜ λ„“μ΄λŠ” %f\n", area);
    
	// -------------μƒμˆ˜---------------
     
    char ch1 = 'A';
    
    printf("%d, %c\n", ch1, ch1); // μ•„μŠ€ν‚€μ½”λ“œ, λ¬Έμžμ—΄
    
    // --------μ‚¬μš©μž 데이터 μž…λ ₯---------
    
    int input = 0;
    scanf("%d", &input);
    printf("input : %d\n", input);
     
    return 0;
}

πŸ€” μ™œ scanf λŠ” &λ³€μˆ˜λͺ…μœΌλ‘œ μ „λ‹¬ν•΄μ•Όν• κΉŒ?

scanfλŠ” μž…λ ₯값을 λ³€μˆ˜μ— 직접 μ €μž₯ν•΄μ•Ό ν•˜λ―€λ‘œ, λ³€μˆ˜μ˜ μ£Όμ†Œλ₯Ό μ „λ‹¬ν•˜μ—¬ κ·Έ μœ„μΉ˜μ— 값을 μ €μž₯ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.




✏️ 회고

Cμ–Έμ–΄λ₯Ό λ°°μš°λ©΄μ„œ 컴파일 언어와 슀크립트 μ–Έμ–΄μ˜ 차이에 λŒ€ν•΄ ν™•μ‹€νžˆ κ΅¬λΆ„ν•˜κ²Œ 된 것 κ°™λ‹€.

profile
🌱개발 기둝μž₯

0개의 λŒ“κΈ€