제가 대학교 1학년 때 C언어 수업에서 배운 내용을 교재와 ppt를 중심으로 정리한 내용입니다. (2022.3 ~ 2022.6)
당시에 공부를 위해서 HWP 파일로 정리해 놓은 것을 그대로 올립니다.
대학에 처음 들어와 정리한 내용이라 모든 내용을 담고 싶은 욕심에 정리가 많이 지져분하고 어설픈점 양해 부탁드립니다..!!
🍑주석
: 프로그램에 대한 설명
- 소스 코드에 대한 정보를 제공하거나 소스 코드의 일부분을 컴파일하지 않게 만들 수 있다.
- 컴파일 하지 않게 만드는 것을 주석처리
- 컴파일러에 의해서 무시
/*
로 시작*/
로 끝/*
*/
끼리 중첩 불가./*
*/
안에//
중첩가능.
//
을 이용한 한줄 주석.- c99에서 추가된 기능.
- 대부분의 컴파일러에서 사용 가능.
- 코드 중간에 주석을 넣을 수 있다.
- 구문별 색 지정기능 존재.
🍑main 함수
: c프로그램에 반드시 필요한 함수
함수
- c프로그램은
main
함수 또는main
함수와 여러함수로 구성. - 각각의 함수는 세미콜론으로 끝나는 문장으로 구성.
- 여러 c문장들이 모여서 함수가 되고, 함수들이 모여서 c프로그램을 구성
진입점 함수(entry point)
: 프로그램이 시작될 때 호출되는 함수( c프로그램에서 main
함수)
main
함수가 없으면 링크 에러 발생.- 프로젝트에는 다양한 c파일이 존재 가능하지만, 코드 수행과 관련된
main
함수는 단 하나만 있어야함. - c프로그램 실행 -> 운영체제가 실행파일을 메모리로 로드 ->
main
함수 호출. - 대소문자 구분하므로 MAIN은 안됨
종료 코드
: main
함수의 리턴값(int
형)
{}(블록)
안에 수행내용이 적히는데, 이 내용을 수행하다가 함수의 끝을 만나거나return
문을 만나면 리턴main
함수에서만return
생략 가능. 리턴형이void
가 아닌 함수에는 반드시return
문이 필요- 리턴시에는 실행의 흐름이 운영체제로 돌아가면서(리턴값이 운영체제로 돌아가며) 프로그램 종료.
- 프로그램의 종료 코드가
0
이면 정상종료, 비정상 종료는0이 아닌값
을 리턴- 정상 종료 : 프로그램이 끝까지 잘 수행되고 끝났다는 의미
- 비정상 종료 : 파일을 열수 없거나, 메모리를 할당할 수 없어서 프로그램이 제대로 수행되지 못하고 종료.
🍑입출력
- 프로그램은 블랙박스 모델
콘솔프로그램
: 콘솔(명령프롬프트)에서 실행되는 프로그램
- 키보드로부터 입력(표준 입력)을 받아서 처리한 다음, 결과를 콘솔에 텍스트로 출력(표준 출력).
입출력 라이브러리
: c프로그램 마다 공통적으로 필요한 입력과 출력 기능 제공.
c프로그램에서 라이브러리를 사용하려면 라이브러리가 제공하는 함수에 대한 정보가 필요.
헤더파일(.h) : 라이브러리 함수에 대한 정보(함수명, 리턴명, 매개변수)를 제공하는 파일.
라이브러리를 사용하려면 헤더파일을
#include
로 포함 시켜야 하는데, 포함시키면 전처리기가 컴파일 전에 헤더 파일의 내용을 소스 파일로 복사해서 라이브러리 함수에 대한 정보를 제공.헤더파일을 포함하지 않고
print
함수를 호출하면
컴파일 경고(= 함수가 정의되지 않았으므로int
를 리턴하는 함수로 가정함) 와
링크 에러(=printf
함수가 출력 되었으나 오브젝트 코드를 찾을 수 없음) 발생.컴파일 경고 : 컴파일은 되지만 문제가 생길 수 있는 부분을 확인하도록 경고하는 것.
- 발생하더라도 오브젝트 코드나 실행 파일이 생성.
- 그렇지만 무시 후 실행 시 프로그램 오작동 가능성이 있으므로 사라지도록 하는 것이 좋음.
콘솔출력
: c프로그램에서 콘솔에 텍스트 출력을 위해서 printf
함수를 이용.
이때 출력할 내용을 “”
로 묶어서 printf
함수의 ()
안에 써준다.
- 문자열 :
“”
안에 묶인 항목 - 줄바꿈 문자(\n) : 이전 출력의 마지막 커서 위치부터 연속해서 출력하기 때문에 커서를 출력 후에 다음줄로 이동하려면 문자열 안에 줄바꿈 문자를 함께 출력해야함
🍑변수
: 값을 저장하기 위한 공간
c에서 입력을 처리시 입력받은 값을 저장하기 위한 변수 필요.
변수 사용을 위해서 필수적으로 변수 이름과 데이터형을 정해야 한다.
- 메모리 공간에 대해서 직접 메모리 주소를 사용하는 대신 변수를 이용해 메모리 공간에 이름을 붙여두고 이름으로 접근하는 방법을 제공.
컴퓨터 시스템에서는 값을 저장하기 위해서 메모리를 사용.
- 메모리는 한바이트 단위로 값 저장가능.
- 각 메모리의 바이트를 구분하기 위한 주소 사용.
데이터형
: 프로그램에서 사용되는 데이터의 종류
- 데이터형에 따라 필요한 메모리 공간의 크기와 메모리에 저장된 값의 의미가 결정
- 문자형(
char
1바이트), 정수형(int
4바이트), 실수형(float
4바이트), 배열, 포인터, 구조체 등
- 문자형(
- 선언
- 변수는 선언 후 사용해야 한다.
- 변수의 선언문은 컴파일러에게 변수의 이름과 데이터형을 미리 알려주고 변수를 사용할 수 있도록 준비시킨다.
- 이름
- 영문자, 숫자, 밑줄기호를 이용해서 만들 수 있음.
- 첫글자로는 반드시 영문자나 밑줄 기호.
- 변수 이름 중간에 빈칸을 사용하거나 다른 기호를 사용해서는 안됨.
- 변수에 값을 저장하거나 메모리에 저장된 변수의 값을 읽어올 때도 변수이름을 사용.
- 사용(대입) : 변수에 값을 저장하는 것
- 변수에 값을 저장하려면 변수 이름 다음에 =을 쓰고 값을 적어준다. - 변수의 데이터형과 같은 형식의 값을 대입해야 한다.
🍑print 함수
문자열을 출력하는 기능
값을 서식에 맞춰 출력하는 기능
형식문자열 = 서식지정자 = 형식지정자
: print
f 함수의 첫 번째 인자로 “”
안에 %
와 약속된 문자로 서식 지정.
- 서식 지정자 여러개 사용가능
- 서식 지정자와 출력값의 개수가 일치해야함.
- 서식 지정자와 출력 값은 순서대로 대응된다.
- 서식 지정자의 종류
%d
: 정수를 10진수로 출력 (int)%x
(0x -> #사용해서 출력) : 정수를 16진수로 출력 (int)%X
: 정수를 16진수로 출력 (int) -> a ~ f 대신 A ~ F를 출력.%f
,%F
: 실수를 부동소수점 표기 방식으로 출력 (float)%e
,%E
: 실수를 지수 표기 방식으로 출력 (float)%c
: 문자 출력 (char)
- 8진수 : 0~7을 이용해서 숫자를 표현
%o
(0 -> #사용해서 출력)
- 10진수 : 0 ~ 9를 이용해서 숫자를 표현
- 16진수 : 0 ~ 9 a ~ f를 이용해서 숫자를 표현
문자폭과 정밀도
1. 문자폭
- 문자폭을 지정하려면
%
와 영문사이에 정수로 폭을 써준다. - 왼쪽으로 정렬 출력하려면 문자폭 앞에
-
, 오른쪽으로 정렬 출력하려면 아무것도 안붙임.
2. 정밀도 : 소수점 이하 자릿수
printf
함수는 실수 출력시 디폴트로 소수점 이하 6자리를 출력.- 정밀도를 지정하려면
%
와 영문 사이에.
과 정수로 지정해준다.
🍑scanf 함수
- 콘솔에서 키보드로 입력한 값을 변수로 읽어온다.
- 할당 or 저장이라고 표현함
scanf
함수를 호출시 형식 문자열(=서식 문자열)과 변수 이름을 지정.- 변수이름 앞에서
&
를 써주어야 함.&
: ~에 라는 뜻
scanf의 서식지정자
: 변수에 입력 받을 값의 형식을 알려주기 위해서 사용
%d
: 콘솔 입력을 10진수로 처리 (int)%x
: 콘솔 입력을 16진수로 처리 (int)%i
: 정수를 10진수, 8진수, 16진수로 입력
ex) 12 012 0x12로 입력시 자동으로 처리 (int)%f
: float
형 실수 입력%lf
: double
형 실수 입력 (long float의 약자)%c
: 문자 1개 입력 (char)
scanf함수의 안전성 문제
scanf_s
사용을 권고하지만, 의도적으로scanf
를 사용할 때 ANSI C를 기준으로 c프로그램을 작성하는 경우 컴파일 에러가 발생하지 않도록 처리 필요.#define _CRT_SECURE_NO_WARNING
#pragma warning(disable:4996)
#pragma warning(disable:6031)
“
와%
사이 꼭 한칸 띄고 작성- 여러개의 값 입력 받기
- 형식문자열 안에 서식지정자를 여러개 지정.
- 서식지정자와 입력받을 변수는 순서대로 대응되고, 서로 개수가 일치해야함.
- 서식지정자 사이에 빈칸을 써주면 공백문자(빈칸, 탭, 줄바꿈 등)를 모두 무시하고 입력을 읽어온다. (콘솔에서 입력할 때)