LabEx 에서 첫 번째 C 프로그램 만들기

CBeginner
지금 연습하기

소개

이 랩에서는 LabEx VM 에서 첫 번째 C 프로그램을 작성하고 실행하는 방법을 배우게 됩니다. 간단한 "Hello, World!" 프로그램으로 시작하여 여러 print 문을 사용하여 출력을 개선하고, 변수를 사용하여 출력을 개인화하며, C 에서 문자열 조작을 탐구하고, 마지막으로 C 프로그램을 컴파일하고 디버깅하는 방법을 배우게 됩니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 고급 레벨의 실험이며 완료율은 49%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

첫 번째 C 프로그램 작성 및 실행

이 단계에서는 LabEx VM 에서 첫 번째 C 프로그램을 작성하고 실행합니다. C 프로그래밍의 기본 구조를 소개하는 간단한 "Hello, World!" 프로그램을 만드는 과정을 안내해 드리겠습니다.

WebIDE 열기

  1. LabEx 인터페이스에서 "WebIDE" 탭 (기본값) 을 클릭하여 VS Code 와 유사한 환경을 엽니다.
  2. 왼쪽 사이드바 파일 탐색기에서 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택합니다.
  3. 파일 이름을 hello.c로 지정합니다. .c 확장자는 이것이 C 소스 코드 파일임을 나타냅니다.
WebIDE 인터페이스 스크린샷

WebIDE 에 대해 자세히 알아보려면 WebIDE 가이드를 확인하세요.

첫 번째 C 프로그램 작성

다음 코드를 복사하여 hello.c 파일에 붙여넣습니다.

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

이 코드를 분석해 보겠습니다.

  • #include <stdio.h>: 표준 입출력 라이브러리를 포함합니다.
  • int main() { ... }: 프로그램 실행이 시작되는 main 함수입니다.
  • printf("Hello, World!\n");: 화면에 텍스트를 출력합니다.
  • \n: 출력 후 새 줄로 이동합니다.
  • return 0;: 프로그램이 성공적으로 완료되었음을 나타냅니다.

프로그램 컴파일 및 실행

WebIDE 에서 터미널을 열고 다음 명령을 실행합니다.

gcc hello.c -o hello
./hello
C 프로그램 실행 터미널 스크린샷

예시 출력:

Hello, World!

명령 설명

  • gcc hello.c -o hello: C 소스 코드를 hello라는 실행 파일로 컴파일합니다.
  • ./hello: 컴파일된 프로그램을 실행합니다.

여러 개의 Print 문으로 출력 개선

이 단계에서는 여러 print 문을 추가하여 C 프로그램을 개선하는 방법을 배우게 됩니다. 이를 통해 더 복잡한 출력을 표시하고 프로그램에서 여러 줄의 텍스트를 사용하는 방법을 이해할 수 있습니다.

기존 프로그램 수정

  1. 이전 단계에서 생성한 WebIDE 에서 hello.c 파일을 엽니다.
  2. 파일 내용을 다음 코드로 바꿉니다.
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    printf("Welcome to C programming!\n");
    printf("This is your first multi-line program.\n");
    return 0;
}

코드 설명

  • 두 개의 printf 문을 더 추가했습니다.
  • printf는 새 줄을 만들기 위해 \n으로 끝납니다.
  • 세미콜론 (;) 은 각 명령의 끝을 표시합니다.

업데이트된 프로그램 컴파일 및 실행

WebIDE 에서 터미널을 열고 다음 명령을 실행합니다.

gcc hello.c -o hello
./hello

예시 출력:

Hello, World!
Welcome to C programming!
This is your first multi-line program.

주요 관찰 사항

  • printf 문은 별도의 줄에 출력됩니다.
  • \n은 출력 사이에 줄 바꿈을 보장합니다.
  • 필요한 만큼 많은 printf 문을 추가할 수 있습니다.

문제 해결 팁:

  • 각 줄이 \n으로 끝나는지 확인합니다.
  • printf 문이 세미콜론으로 끝나는지 확인합니다.
  • 컴파일하기 전에 파일을 저장했는지 확인합니다.

변수를 사용하여 출력 개인화

이 단계에서는 C 에서 변수를 사용하여 보다 동적이고 개인화된 출력을 만드는 방법을 배우게 됩니다. 변수를 사용하면 프로그램 내에서 데이터를 저장하고 조작할 수 있습니다.

변수를 사용하여 새로운 C 프로그램 만들기

  1. WebIDE 를 열고 greeting.c라는 새 파일을 만듭니다. 또는 터미널에서 touch greeting.c를 입력하여 파일을 만들 수 있습니다.
  2. 다음 코드를 greeting.c 파일에 입력합니다.
#include <stdio.h>

int main() {
    char name[] = "LabEx";
    printf("Hello, %s!\n", name);
    printf("Welcome to C programming, %s!\n", name);
    return 0;
}

코드 설명

  • char name[] = "LabEx";: name이라는 문자 배열 (문자열) 변수를 만듭니다.
  • %sprintf에게 문자열을 삽입하도록 지시하는 형식 지정자입니다.
  • 형식 문자열 뒤의 , name은 삽입할 변수를 지정합니다.

프로그램 컴파일 및 실행

WebIDE 에서 터미널을 열고 다음 명령을 실행합니다.

gcc greeting.c -o greeting
./greeting

예시 출력:

Hello, LabEx!
Welcome to C programming, LabEx!

변수 실험

name 변수를 자신의 이름으로 변경해 보세요.

char name[] = "Your Name";

프로그램을 다시 컴파일하고 실행하여 개인화된 출력을 확인하세요.

문제 해결 팁:

  • printf에서 사용하기 전에 변수가 정의되었는지 확인합니다.
  • 컴파일하기 전에 파일을 저장했는지 확인합니다.
  • 변수 이름의 철자가 올바른지 확인합니다.

C 언어 문자열 조작 탐구

이 단계에서는 C 에서 문자열 연결 및 표준 라이브러리의 문자열 관련 함수 사용을 포함한 기본적인 문자열 조작 기술을 배우게 됩니다.

문자열 조작 프로그램 만들기

  1. WebIDE 를 열고 strings.c라는 새 파일을 만듭니다.
  2. 다음 코드를 입력합니다.
#include <stdio.h>
#include <string.h>

int main() {
    char first_name[] = "Lab";
    char last_name[] = "Ex";
    char full_name[20];

    // Concatenate strings
    strcpy(full_name, first_name);
    strcat(full_name, " ");
    strcat(full_name, last_name);

    // Print string length and concatenated name
    printf("First name length: %lu\n", strlen(first_name));
    printf("Last name length: %lu\n", strlen(last_name));
    printf("Full name: %s\n", full_name);

    return 0;
}

코드 설명

  • #include <string.h>: 문자열 조작 함수를 포함합니다.
  • strcpy(): 문자열을 다른 문자열로 복사합니다.
  • strcat(): 두 문자열을 연결 (결합) 합니다.
  • strlen(): 문자열의 길이를 반환합니다.
  • %lu: 부호 없는 long (문자열 길이와 함께 사용) 에 대한 형식 지정자입니다.

프로그램 컴파일 및 실행

WebIDE 에서 터미널을 열고 다음 명령을 실행합니다.

gcc strings.c -o strings
./strings

예시 출력:

First name length: 3
Last name length: 2
Full name: Lab Ex

문자열 조작 기술

시연된 주요 문자열 연산:

  • 문자 배열 만들기
  • strcpy()로 문자열 복사
  • strcat()로 문자열 결합
  • strlen()으로 문자열 길이 찾기

문제 해결 팁:

  • 대상 문자열에 충분한 공간이 있는지 확인합니다.
  • 문자열 함수를 사용하려면 항상 <string.h>를 포함합니다.
  • 오버플로를 방지하기 위해 문자열 버퍼 크기에 주의합니다.

C 프로그램 컴파일 및 디버깅

이 단계에서는 컴파일러 경고 이해, 컴파일 플래그 사용, 기본적인 디버깅 전략을 포함하여 C 프로그램에 대한 필수적인 컴파일 및 디버깅 기술을 배우게 됩니다.

의도적인 오류가 있는 프로그램 만들기

  1. WebIDE 를 열고 debug.c라는 새 파일을 만듭니다.
  2. 의도적인 오류가 있는 다음 코드를 입력합니다.
#include <stdio.h>

int main() {
    int x = 10;
    int y = 0;

    // Intentional division by zero
    int result = x / y;

    printf("Result: %d\n", result);

    // Unused variable
    int z = 5;

    return 0;
}

경고와 함께 컴파일

추가 경고 플래그를 사용하여 프로그램을 컴파일합니다.

gcc -Wall -Wextra debug.c -o debug

컴파일 플래그 설명

  • -Wall: 대부분의 경고 메시지를 활성화합니다.
  • -Wextra: 더욱 자세한 경고를 활성화합니다.

예시 컴파일러 출력:

debug.c: In function ‘main’:
debug.c:13:9: warning: unused variable ‘z’ [-Wunused-variable]
   13 |     int z = 5;
      |         ^

GDB 를 사용하여 디버깅

디버깅 기호와 함께 컴파일합니다.

gcc -g debug.c -o debug

디버깅 시작:

gdb ./debug

GDB 명령어:

  • run: 프로그램 시작
  • break main: main 함수에 중단점 설정
  • print x: 변수 x 의 값 출력
  • next: 다음 줄 실행
  • quit: GDB 종료
(gdb) run
Starting program: /home/labex/project/debug
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGFPE, Arithmetic exception.
0x0000555555555167 in main () at debug.c:8
8           int result = x / y;
(gdb) print x
$1 = 10
(gdb) break main
Breakpoint 1 at 0x555555555155: file debug.c, line 4.
(gdb) next

Program terminated with signal SIGFPE, Arithmetic exception.
The program no longer exists.
(gdb) quit

GDB 는 8 행에서 0 으로 나누는 오류를 보여줍니다. 프로그램은 산술 예외로 인해 충돌합니다.

프로그램 수정

debug.c를 수정하여 나눗셈을 안전하게 처리합니다.

#include <stdio.h>

int main() {
    int x = 10;
    int y = 2;  // Change from 0 to a non-zero value

    if (y != 0) {
        int result = x / y;
        printf("Result: %d\n", result);
    } else {
        printf("Error: Division by zero!\n");
    }

    return 0;
}

다시 컴파일하고 실행합니다.

gcc -Wall -Wextra debug.c -o debug
./debug

출력:

Result: 5

문제 해결 팁:

  • 항상 -Wall -Wextra로 컴파일합니다.
  • 컴파일러 경고에 주의합니다.
  • 복잡한 디버깅 시나리오에는 GDB 를 사용합니다.
  • 잠재적인 런타임 문제를 위해 오류 검사를 추가합니다.

요약

이 랩에서는 첫 번째 C 프로그램을 작성하고 실행하는 방법, 여러 print 문을 사용하여 출력을 개선하는 방법, 변수를 사용하여 출력을 개인화하는 방법, C 에서 문자열 조작을 탐구하는 방법, C 프로그램을 컴파일하고 디버깅하는 방법을 배웠습니다. 라이브러리 포함, main 함수 정의, printf() 를 사용하여 출력 표시, 프로그램 컴파일 및 실행을 포함하여 C 프로그래밍의 기본 구조에 대한 실질적인 경험을 얻었습니다. 또한 여러 print 문 사용, 변수 및 문자열 작업과 같은 보다 고급 개념도 탐구했습니다.