이제 공부할 C언어는 절차지향 프로그래밍이다.
프로그램에서 여러 요소(변수, 함수, 배열)를 구분 하는데 사용한다.
식별자를 사용하는데에는 규칙이 있다.
식별자는 항상 구체적으로 적어야 한다.
https://en.cppreference.com/w/c/keyword 참조
식별자는 선언을 통해 프로그램에게 알려진다.
선언을 통해 식별자의 의미와 속성을 지정해줄 수 있다.
식별자에 대한 정보를 제공하는 선언을 정의 라고 한다.
식별자는 선언 때 범위를 가진다.
범위
file_num과 같이 선언 해 주면 파일 전체에서 사용할 수 있는 변수를 선언한 것 이고
block_num과 같이 선언 해 주면 그 블록(중괄호라고 봐도 된다)에서만 사용할 수 있는 변수를 선언한 것 이다.
구문은 컴퓨터에게 명령을 내리기 위해 사용된다. 총 5가지가 있다.
주석은 사용자에게 정보를 남기는 문서 역활을 한다.
컴퓨터는 처리하지 않으며 코드를 보고있는 사람만 볼 수 있다.
주석 예시이다.
/*
이 안의 내용은 모두 주석처리가 된다.
*/
// 이 줄의 내용은 모두 주석처리가 된다.
문제 해결을 위해선 데이터를 메모리에 저장하고 이를 조작해야 한다.
데이터가 저장되는 영역을 객체(Object)라 한다.
객체는 아래와 같은 속성을 가진다.
크기(Size)
- 데이터를 저장하기 위한 바이트의 개수를 의미한다.
- sizeof 연산자를 사용해 구할 수 있다.
- ex) sizeof(객체) 객체의 타입에 따라 값이 달라진다.
정렬 요건(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)이 있다.
암시적 변환(위 이미지)
명시적 변환(위 이미지)
명시적 변환에서 사용하는 캐스팅은 정수나 실수, 문자끼리는 자유롭게 변환할 수 있다. 하지만 이 때 데이터손실이 일어날 수 있다.