소개
이 랩에서는 LabEx VM 에서 첫 번째 C 프로그램을 작성하고 실행하는 방법을 배우게 됩니다. 간단한 "Hello, World!" 프로그램으로 시작하여 여러 print 문을 사용하여 출력을 개선하고, 변수를 사용하여 출력을 개인화하며, C 에서 문자열 조작을 탐구하고, 마지막으로 C 프로그램을 컴파일하고 디버깅하는 방법을 배우게 됩니다.
이 랩에서는 LabEx VM 에서 첫 번째 C 프로그램을 작성하고 실행하는 방법을 배우게 됩니다. 간단한 "Hello, World!" 프로그램으로 시작하여 여러 print 문을 사용하여 출력을 개선하고, 변수를 사용하여 출력을 개인화하며, C 에서 문자열 조작을 탐구하고, 마지막으로 C 프로그램을 컴파일하고 디버깅하는 방법을 배우게 됩니다.
이 단계에서는 LabEx VM 에서 첫 번째 C 프로그램을 작성하고 실행합니다. C 프로그래밍의 기본 구조를 소개하는 간단한 "Hello, World!" 프로그램을 만드는 과정을 안내해 드리겠습니다.
hello.c로 지정합니다. .c 확장자는 이것이 C 소스 코드 파일임을 나타냅니다.
WebIDE 에 대해 자세히 알아보려면 WebIDE 가이드를 확인하세요.
다음 코드를 복사하여 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

예시 출력:
Hello, World!
gcc hello.c -o hello: C 소스 코드를 hello라는 실행 파일로 컴파일합니다../hello: 컴파일된 프로그램을 실행합니다.이 단계에서는 여러 print 문을 추가하여 C 프로그램을 개선하는 방법을 배우게 됩니다. 이를 통해 더 복잡한 출력을 표시하고 프로그램에서 여러 줄의 텍스트를 사용하는 방법을 이해할 수 있습니다.
hello.c 파일을 엽니다.#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 에서 변수를 사용하여 보다 동적이고 개인화된 출력을 만드는 방법을 배우게 됩니다. 변수를 사용하면 프로그램 내에서 데이터를 저장하고 조작할 수 있습니다.
greeting.c라는 새 파일을 만듭니다. 또는 터미널에서 touch greeting.c를 입력하여 파일을 만들 수 있습니다.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이라는 문자 배열 (문자열) 변수를 만듭니다.%s는 printf에게 문자열을 삽입하도록 지시하는 형식 지정자입니다., name은 삽입할 변수를 지정합니다.WebIDE 에서 터미널을 열고 다음 명령을 실행합니다.
gcc greeting.c -o greeting
./greeting
예시 출력:
Hello, LabEx!
Welcome to C programming, LabEx!
name 변수를 자신의 이름으로 변경해 보세요.
char name[] = "Your Name";
프로그램을 다시 컴파일하고 실행하여 개인화된 출력을 확인하세요.
문제 해결 팁:
printf에서 사용하기 전에 변수가 정의되었는지 확인합니다.이 단계에서는 C 에서 문자열 연결 및 표준 라이브러리의 문자열 관련 함수 사용을 포함한 기본적인 문자열 조작 기술을 배우게 됩니다.
strings.c라는 새 파일을 만듭니다.#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 프로그램에 대한 필수적인 컴파일 및 디버깅 기술을 배우게 됩니다.
debug.c라는 새 파일을 만듭니다.#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;
| ^
디버깅 기호와 함께 컴파일합니다.
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로 컴파일합니다.이 랩에서는 첫 번째 C 프로그램을 작성하고 실행하는 방법, 여러 print 문을 사용하여 출력을 개선하는 방법, 변수를 사용하여 출력을 개인화하는 방법, C 에서 문자열 조작을 탐구하는 방법, C 프로그램을 컴파일하고 디버깅하는 방법을 배웠습니다. 라이브러리 포함, main 함수 정의, printf() 를 사용하여 출력 표시, 프로그램 컴파일 및 실행을 포함하여 C 프로그래밍의 기본 구조에 대한 실질적인 경험을 얻었습니다. 또한 여러 print 문 사용, 변수 및 문자열 작업과 같은 보다 고급 개념도 탐구했습니다.