C 프로그래밍

김동현·2022년 5월 11일
0

이제 공부할 C언어는 절차지향 프로그래밍이다.

절차지향은 순차적인 처리가 중요시 되며 전체가 유기적으로 연결되있는것을 의미한다.

식별자

프로그램에서 여러 요소(변수, 함수, 배열)를 구분 하는데 사용한다.
식별자를 사용하는데에는 규칙이 있다.
식별자는 항상 구체적으로 적어야 한다.

  • 첫 글자는 반드시 알파벳이어야 한다.
  • 대소문자를 구분한다.
  • 키워드를 사용하지 못한다.
  • 띄어쓰기를 포함할 수 없다.
키워드는 c언어에서 의미가 지정되어 있는것들을 의미한다.

https://en.cppreference.com/w/c/keyword 참조

구체적으로 적는 키워드 예시
t_n = s_n + l_n (x)
total_number = small_number + large_number; (o)

선언

식별자는 선언을 통해 프로그램에게 알려진다.
선언을 통해 식별자의 의미와 속성을 지정해줄 수 있다.
식별자에 대한 정보를 제공하는 선언을 정의 라고 한다.
식별자는 선언 때 범위를 가진다.

범위

  • 블록범위(Block Scope)
    - 복합구문 안쪽에서만 식별자를 볼 수 있는 영역이다.
    - 블록범위 안쪽에는 또다른 블록범위가 있을 수 있다.
  • 파일범위(File Scope)
    - 파일 전체에서 식별자를 볼 수 있는 영역

file_num과 같이 선언 해 주면 파일 전체에서 사용할 수 있는 변수를 선언한 것 이고
block_num과 같이 선언 해 주면 그 블록(중괄호라고 봐도 된다)에서만 사용할 수 있는 변수를 선언한 것 이다.

구문

구문은 컴퓨터에게 명령을 내리기 위해 사용된다. 총 5가지가 있다.

  • 복합구문(Compound Statement)
    - 중괄호를 통해 여러 구문을 적은 것을 의미
    - 블록(Block)라고도 한다.
  • 식 구문(Expression Starement)
    - 계산을 정하는 연산자(Operator)와 피연산자(Operand)의 시퀀스다.
    • 계산을 하는 것을 평가라 한다.
  • 분기분(Selection Statement)
    - 식의 계산에 따라 몇 개의 구문 중 하나를 선택하게 하는 구문이다.
    - 프로그램에 여러 흐름을 만든다.
    - if / switch 이 있다.
  • 반복문(Iteration Statement)
    - 특정 구문을 반복하는 구문이다.
    - while / do-while / for 가 있다.
  • 점프문(Jump Statement)
    - 조건에 관계없이 흐름을 바꾸는 구문이다.
    - break / continue / return / goto 가 있다.

주석

주석은 사용자에게 정보를 남기는 문서 역활을 한다.
컴퓨터는 처리하지 않으며 코드를 보고있는 사람만 볼 수 있다.


주석 예시이다.

/*
이 안의 내용은 모두 주석처리가 된다.
*/

// 이 줄의 내용은 모두 주석처리가 된다.

객체

문제 해결을 위해선 데이터를 메모리에 저장하고 이를 조작해야 한다.
데이터가 저장되는 영역을 객체(Object)라 한다.
객체는 아래와 같은 속성을 가진다.

  • 크기(Size)
    - 데이터를 저장하기 위한 바이트의 개수를 의미한다.
    - sizeof 연산자를 사용해 구할 수 있다.
    - ex) sizeof(객체) 객체의 타입에 따라 값이 달라진다.

    • int : 4byte
    • short : 2byte
    • long : 4byte
    • float : 4byte
    • double : 8byte
    • long double : 8byte
    • char : 1byte
  • 정렬 요건(Alignment Requirement)
    - 데이터를 저장하기 위해 필요한 연속적인 바이트 개수

  • 기억 존속 시간(Storage Duration)
    - 데이터를 얼마나 오래 가질 수 있는지를 의미한다.

  • 수명(Lifetime)
    - 객체가 유효한 시간을 의미하며 기억 존속 시간과 같다.
    - 블록 범위를 갖는 객체의 수명은 정의된 순간부터 블록 끝까지이다.
    - 파일 범위를 갖는 객체의 수명은 프로그램 시작부터 프로그램 끝날 때까지 이다.

  • 타입(type)
    - 객체가 가지고 있는 값의 해석 방법이다.

    • 정수, 실수, 문자, 문자열 타입이 있다.
  • 값(Value)
    - 데이터를 의미한다.

  • 식별자(Identifier)
    - 객체의 이름을 의미한다.

정수

C프로그램에서 정수는 부호가 있는 정수와 부호가 없는 정수로 나누어진다.

정수형 타입
int (4byte)
short (2byte)
long (4byte)
이 있다.

객체를 정의할 때 초기값을 지정할 수 있다. 이 과정을 초기화 라고 한다.

정수는 접두가를 이용하여 10진법 외에도 8진법이나 16진법으로 나타낼 수 있다.

42 (10진수)
052 (8진수)
0x2a (16진수)

정수 타입에 사용할 수 있는 연산자는 산술연산이 있다.
signed char number = 15;

+number; // 15
-number; // -15
number + 20 // 35
number - 10 // 5
number * 2 // 30
number / 10 // 1
number % 10 // 5

~number; // 0xF0
number & 0x03; // 0x03
number | 0x12; // 0x1F
number ^ 0x3F; // 0x30
number << 1; // 0x1E;
number >> 1; // 0x07;
~number >> 1; // 0xF8;

그리고 증감 연산이 있다.

int a = 1;
int b = a++; // b = 1, a = 2
int c = ++a; // c = 3, a = 3

실수

실수를 표현하기 위해 부동 소수점으로 표현한다.

부동 소수점 타입에는 모듈로연산자(%)를 제외한 산술연산과 증감연산이 가능하다.

문자

문자는 char 타입을 사용하며 ASCII(아스키) 코드로 해석한다

char 타입은 정수 타입이기도 하므로 산술연산 및 증감연산이 가능하다.

정수타입 출력인 printf("%d"); 에선 아스키코드값인 66이
문자타입 출력인 printf("%c"); 에선 문자 'B' 출력된다.

변수와 상수


우리가 만든 객체를 변수(Variable)이라고 한다.
이는 객체에 저장된 값을 수정할 수 있다는 의미를 가지고 있다.


값이 수정되지 않길 원할 때 const 타입 수식자(Type Qualifier) 를 써주면 정의된 이후 값이 수정되지 않도록 컴파일 단계에서 막을 수 있다.
위와 같이 데이터를 변경할 수 없는 객체를 상수(Constant)라 한다.

변환

변환에는 암시적 변환(Implicit Conversion)과 명시적 변환(Explicit Conversion)이 있다.


암시적 변환(위 이미지)


명시적 변환(위 이미지)

명시적 변환에서 사용하는 캐스팅은 정수나 실수, 문자끼리는 자유롭게 변환할 수 있다. 하지만 이 때 데이터손실이 일어날 수 있다.

profile
해보자요

0개의 댓글