문타쿠, 공부하다.
[C언어 코딩 도장] Unit 3. Hello, world!로 시작하기 본문
3.1 새 프로젝트 만들기
"솔루션 및 프로젝트를 같은 디렉터리에 배치 O"
"솔루션 및 프로젝트를 같은 디렉터리에 배치 X"
3.2 프로젝트에 C언어 소스 파일 추가하기
솔루션
- 프로젝트들의 모음으로, 하나의 솔루션에 여러 프로젝트가 들어갈 수 있다.
- ex) 자동차 만들기 솔루션 // 핸들 만들기 프로젝트1, 시트 만들기 프로젝트2, 바퀴 만들기 프로젝트3 ...
프로젝트
- 프로그램(실행파일.exe)을 만들 때 필요한 소스파일(.c), 헤더파일(.h) 등 각종 파일과 설정을 담고 있다.
- ex) 핸들 만들기 프로젝트1 // 핸들 모양 소스파일1, 핸들 색깔 소스파일2, 헤더파일1 ...
확장자
- .c : C 컴파일러로 컴파일
- .cpp: C++ 컴파일러로 컴파일
컴파일
- C언어로 코드를 작성하면(고급 언어) 이를 컴퓨터가 알아들을 수 있는 기계어(저급 언어, 0과 1)로 번역하는 과정
컴파일러
- 컴파일 역할을 하는 프로그램으로, 비주얼 스튜디오가 컴파일러 역할을 함
3.3 Hello, world! 출력하기
"빌드(B) > 솔루션 빌드(B)"
- .c 소스코드를 컴파일하여 .exe 실행파일을 만들어낸다.
"디버그(D) > 디버그하지 않고 시작(H)"
- 솔루션 빌드로 만들어진 .exe 실행파일이 실행된다. -> 명령 프롬프트 창에 Hello, world! 출력
"만약 솔루션 빌드를 하지 않고 바로 디버그하지 않고 시작을 누른다면?"
- 자동으로 .c 소스파일을 컴파일하여 .exe 실행파일을 생성하고 .exe 프로그램이 실행된다.
"디버그에서 디버깅 시작(S)과 디버그하지 않고 시작(H)은 무슨 차이점이 있는지?"
디버깅 시작 (Unit 6. 디버거 사용하기 참조)
- ‘디버깅’은 결과를 확인하는 것이 목적이 아니라 결함을 추적하는 것이 목적인 기능
- 브레이크 포인트(중단점)를 설정하여 프로시저 단위로 실행하거나 한 단계씩 코드를 실행할 수 있다.
- 이 방법으로 프로그램을 실행하면 프로그램에 발생한 문제점을 찾을 수 있도록 다양한 기능이 추가되어 실행되기 때문에 프로그램이 메모리도 더 많이 차지하고 실행속도 느려진다.
디버그하지 않고 시작
- .exe 실행파일을 원본 그대로 실행하는 것
- 프로그램을 분석하거나 어떤 결함을 추적할 수 있는 기능이 제공되지 않음
프로그램 실행 시 '디버그하지 않고 시작’으로 실행 결과를 확인한 후, 원하는 결과가 나오지 않았을 때 ‘디버깅 시작’을 실행하여 문제를 해결하자.
*참조
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=tipsware&logNo=221242348781
VS2017에서 C 언어 실습용 프로그램 실행하기
: C 언어 관련 전체 목차 http://blog.naver.com/tipsware/221010831969 1. VS2017에서 프...
blog.naver.com
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
return 0;
}
#include
- 전처리기 지시문
- 지정한 파일을 코드에 포함하라는 뜻
- 코드를 작성하는 사람은 컴파일하기 전에 컴파일에 필요한 것들을 컴파일러에게 알려 줘야 하는데, 이때 사용하는 것이 전처리기 지시문
- 지시문 뒤에 파일을 표시하는 방법
- <>
- 컴파일러가 있는 폴더에서 해당 파일을 찾음
- 보통 C언어에 정의된 표준 파일을 추가할 때 사용
- “ ”
- 현재 소스 코드가 있는 폴더에서 해당 파일을 찾음
- 보통 직접 작성한 파일을 코드에 포함할 때 사용
- <>
stdio.h
- 표준 입출력(Standard Input Ouput) 함수를 포함한 헤더 파일
- 헤더 파일이란?
- 확장자가 .h인 파일로, 다른 파일에 정의된 상수나 변수, 함수 등을 사용하기 위해 만들어짐
- stdio.h 파일에 printf() 함수나 scanf() 함수 등 입출력 관련 함수들이 선언되어 있어 추가 작업 없이 함수들을 바로 사용할 수 있다.
#include <stdio.h>
- 'stdio.h'라는 헤더 파일을 포함시킨다는 의미
main() 함수 -> int main(void)
- 단어 뒤에 괄호가 붙은 것을 '함수'라고 한다. 즉, 함수 옆에는 무조건 소괄호()를 넣는게 규칙
- main() 함수는 모든 프로그램의 시작점으로, 한 프로젝트에 반드시 하나만 존재
- 프로그램을 실행하면 전처리기 지시문을 제외하고 main() 함수 안에 적힌 코드가 가장 먼저 실행되는데, 이때 main() 함수가 없으면 프로그램이 실행되지 않고 오류가 발생한다.
- 앞에 붙은 int는 main() 함수가 반환하는 값의 자료형을 의미 (C언어에서 main() 함수는 int(정수형)가 표준)
- 소괄호 안에 든 void는 main() 함수가 전달 받는 값으로, 전달 받는 값이 없다는 뜻
return 0;
- main() 함수 영역의 맨 끝 부분에는 반드시 return 0;를 적어야 한다.
- return: 특정 값을 반환하는 동시에 함수를 종료시키는 명령어
- 숫자 값: return 명령어에 의해 반환되는 값
- return 0: 프로그램이 정상적으로 종료되었음을 의미
- return 1: 프로그램이 비정상적으로 종료되었음을 의미
*참조
https://blog.naver.com/cursor_dori/222831110984
C언어 기초 - 기본 코드 include, stdio.h, int main()에 대해 알아봅시다!
"C언어 기본 코드를 분석하면서 하나씩 이해해 봅시다!" ■ C언어 코딩을 시작하기 전 C언어 ...
blog.naver.com
"C언어 컴파일 과정"
1단계
- C언어로 소스코드를 작성한다. -> helloworld.c
2단계
- 전처리기가 #include와 같은 전처리 구문을 처리한다. -> helloworld.i
3단계
- 전처리가 끝난 .i 파일을 컴파일러가 컴파일한다. -> helloworld.s
4단계
- 어셈블러가 .s파일을 완전히 기계어로 바꾸어준다. -> helloworld.o
- 오브젝트 코드 .obj 파일이 생성되며, .c 파일 하나당 .obj 파일 하나
5단계
- 링커가 여러 개의 오브젝트 파일과 라이브러리를 합쳐(링킹) .exe 실행파일을 만든다.
*참조
https://www.youtube.com/watch?v=-w6O5Bq8OMY&list=PL5sEd8VUnr604bYwv_lMh0iOdk3fg8p6K&index=2
"C언어의 main() 함수는 도대체 어떻게 작성해야 하는가..?!"
책이나 강의 그리고 다른 사람들의 C언어 코드를 보면 main() 함수를 작성한 형태가 조금씩 다르다.
과연 무엇이 표준인가?!
먼저 C언어 표준이 제시하는 가장 이상적인 main() 함수의 정의문은
int main(int argc, char *argv[], char *env[])이다.
- int argc
- 프로그램을 실행할 때 명령줄에서 입력한 인수의 개수
- char *argv[]
- 프로그램을 실행할 때 전달받는 매개변수의 배열
- 값이 문자이던 숫자이던 무조건 문자열로 넘어감
- argv[0]은 실행파일의 절대경로를 넘겨받고, argv[1]부터 넘겨받은 인수가 저장
- char *env[]
- 운영체제의 환경변수 배열
그냥 이런 형태의 이상적인 main() 함수 정의문이 있구나~ 하고 알고만 있으면 될 것 같다.
왜냐하면 이것들은 생략이 가능하기 때문!
해당 매개변수들은 뒤에서부터 하나씩 생략이 가능하며 -> int main()
생략이 가능하기 때문에 넘겨받는 값이 없다는 뜻의 void로 대체 가능 -> int main(void)
*참조
[C언어] main (int argc, char **argv )의 의미는 무엇인가?
main 함수의 인수 void(or int) main(int argc, char *argv[], char *env[]) { } 인수는 뒤...
blog.naver.com
int main() VS int main(void)
- 결론적으로 두 함수는 운영체제 입장에서는 뭔가가 다르지만, 사용자 입장에서 똑같다고 볼 수 있다.
- 하지만 int main()보다 void를 명시함으로써 명확하게 인수가 없다는 것을 알려주는 int main(void)가 권장되는 방법이다.
void main() VS void main(void)
- void main은 C언어 표준안에 어긋나는 문법 -> 오래전에는 사용 가능은 했음
- C 컴파일러를 하나로 통합하기 위해 이를 더이상 지원하지 않는 컴파일러들이 늘어나고 있는 추세
3.4 서식 지정자 이용하기
"서식 지정자"
- printf로 문자열을 출력할 때 값으로 바뀌는 부분
- 변수를 사용하여 같은 내용을 여러 개 출력하거나, 출력 형태를 바꿀 때 유용하게 사용
'C언어 > C언어 코딩 도장' 카테고리의 다른 글
[C언어 코딩 도장] Unit 4. 기본 문법 알아보기 (0) | 2023.08.14 |
---|---|
[C언어 코딩 도장] Unit 3. 연습문제 및 심사문제 (0) | 2023.08.14 |
[C언어 코딩 도장] Unit 2. Visual Studio 설치하기 (0) | 2023.08.14 |
[C언어 코딩 도장] Unit 1. 소프트웨어 교육과 C언어 (0) | 2023.08.14 |
[C언어 코딩 도장(개정판)] 2023.08.14 ~ 진행중 (0) | 2023.08.14 |