[Warming up C Programming] chapter 2 : 프로그래밍의 기본

eunee22·2023년 7월 6일
0

Warming-up C Programming

목록 보기
2/10
post-thumbnail

제가 대학교 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바이트), 배열, 포인터, 구조체 등
  • 선언
    • 변수는 선언 후 사용해야 한다.
    • 변수의 선언문은 컴파일러에게 변수의 이름과 데이터형을 미리 알려주고 변수를 사용할 수 있도록 준비시킨다.
  • 이름
    • 영문자, 숫자, 밑줄기호를 이용해서 만들 수 있음.
    • 첫글자로는 반드시 영문자나 밑줄 기호.
    • 변수 이름 중간에 빈칸을 사용하거나 다른 기호를 사용해서는 안됨.
    • 변수에 값을 저장하거나 메모리에 저장된 변수의 값을 읽어올 때도 변수이름을 사용.
  • 사용(대입) : 변수에 값을 저장하는 것
    • 변수에 값을 저장하려면 변수 이름 다음에 =을 쓰고 값을 적어준다. - 변수의 데이터형과 같은 형식의 값을 대입해야 한다.
  • 문자열을 출력하는 기능

  • 값을 서식에 맞춰 출력하는 기능

형식문자열 = 서식지정자 = 형식지정자

: printf 함수의 첫 번째 인자로 “”안에 %와 약속된 문자로 서식 지정.

  • 서식 지정자 여러개 사용가능
    • 서식 지정자와 출력값의 개수가 일치해야함.
    • 서식 지정자와 출력 값은 순서대로 대응된다.
  • 서식 지정자의 종류
    %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)
  • % 사이 꼭 한칸 띄고 작성
  • 여러개의 값 입력 받기
    • 형식문자열 안에 서식지정자를 여러개 지정.
    • 서식지정자와 입력받을 변수는 순서대로 대응되고, 서로 개수가 일치해야함.
    • 서식지정자 사이에 빈칸을 써주면 공백문자(빈칸, 탭, 줄바꿈 등)를 모두 무시하고 입력을 읽어온다. (콘솔에서 입력할 때)
profile
보안 공부하는 대학교 4학년 / 시리즈에서 더욱 편하게 글을 찾아보실 수 있습니다:)

0개의 댓글