[1장] C언어 변수, 자료형
개인 공부 중 정리용. (참고 : 모두의 c언어 - 이형우)
*프로그램의 개발 및 실행과정*

#1. 소스 코드(source Code) 란 컴퓨터 프로그램을 사람이 읽을 수 있는 프로그래밍 언어로 기술한 텍스트파일 [ 출처 : 위키백과]
#1.1 예시
#include <stdio.h>
main() { printf("hellow"};}
#1.2 특징 - 사람이 읽을 수 있는, 프로그래밍 언어이므로 컴퓨터는 이해할 수 없음. 따라서 컴파일(compile)작업 이 필요
#2. 컴파일(compile)이란 소스코드를 0과 1로 구성된 코드로 변환하여 컴퓨터가 이해할수 있는 기계어로 변환 시키는 것.
기계어로 변경된 파일을 목적파일(object File)이라 함.
#2.1 특징 - *.c 소스 코드 파일이 컴파일 과정 후 *.obj를 생성함.
#3. 헤더파일(header file)이란 자주 사용하는 명령어를 미리 만들어서 모아둔 파일
#3.1 예시
stdio.h(Standard input/output, 범용 입/출력)라는 헤더파일에 printf -> 출력을 하는 함수가 존재함.
#3.2 특징 - printf()함수를 사용하기 위해 stdio.h 파일을 소스코드에 포함(include)해야함 -> #include가 갖는 의미.
#4. 링크&로더
링크(link)란 헤더파일을 소스코드에 연결한다는 것. 이후 로더.
로더(loader)란 링크된 목적파일을 프로그램에 싣는 것
이후 확장자가 *.exe인 실행파일(execution file)을 생성함.
#4.1 특징 - 비로소 소스코드가 실행될 준비를 모두 갖춤.
#5. 실행 - 소스코드의 수행결과가 화면에 나타남.
컴퓨터가 요구하는 규칙이나 문법이 틀린 경우, 즉 컴파일 과정에서 오류가 발생한 것을 버그(bug)라 한다.
이 오류를 수정하는 작업을 디버그(debug) 또는 디버깅(debugging) 과정이라고 한다.
*변수 및 자료형*
프로그래밍을 하려면 값을 저장해놓기도 하고, 저장된 값을 가져와서 다시 사용하기도 해야함.
-> 예 : int a =5; int b= 7; a+b 의 경우 a,b 변수에 저장된 값을 가져와야함.
값을 저장한다는 의미는 컴퓨터 하드웨어인 메모리(memory, HDD,SSD/ flash,SRAM 등)에 저장한다는 의미.
컴퓨터는 모든 정보를 0과 1, 즉 2진수(binary number) 체계로 저장함. 숫자, 문자또한 0과 1.
따라서 숫자나 문자로 구성된 정보의 값을 저장하려면 정보의 최소 저장단위인 비트(bit)를 사용함.
메모리는 연속된 데이터 바이트의 모임. 데이터의 종류에 따라 메모리를 차지하는 크기가 다름.
# 변수(variable)란 특정 크기, 타입으로 할당된 메모리 공간
->i nt a란 정수형 변수를 선언하며 그 이름이 식별자(identifier) a.
-> 값 변경이 불가능한 상수와는 다르게 그 값을 변경할 수 있다.
# 자료형(data type)은 데이터의 종류에 따라 컴퓨터의 메모리 크기를 정해둔 것을 의미한다.
논리형, 정수형, 실수형, 문자형, 등
C언어 기준
- 1byte=8bit으로 표현할 수 있는 정수의 범위가 2^8 =256이므로 이를 2로나눈 2^7이 최대, 최소값이된다.
- 음수는 (-1)~(-128) ,양수는 (0)~(+127)이므로 2^n-1로 표현하였다.
- float 형은 unsigned 형이 존재하지 않는다.
- 지정된 크기를 벗어나면 오버플로우(overflow)가 발생한다.
- int 자료형을 사용하여 4바이트만 할당해도 충분한데 굳이long 자료형을 사용해서 8바이트를 할당하는 것은 메모리 낭비. - 특정 MCU는 개발자가 사용할 수 있는 메모리양이 제한되어 있으므로 1바이트라도 아껴야 함.
서식지정자 출처 - https://opentutorials.org/module/3921/23515
(간혹 인터넷 자료들 중에 실수형 앞에 +,-가 붙는 이유가 무엇인지?)
*변수 선언 및 초기화*
#1. 정수형 변수
#include <stdio.h>
main() {
int a;
// 컴퓨터의 컴파일러가 내 컴퓨터에서 사용가능한 메모리 중에서, 정수를 저장할 수 있는 'a'라는 메모리 상자(memory byte)를 생성함.
// 'a' 변수를 선언하고 자료형(int) 을 지정함. 즉, 정수형 변수 a 선언.
// int 자료형 변수를 선언하면 4byte 즉 32bit의 메모리공간이 생김
a = 5;
// 확보된 메모리 상자안에 숫자 '5'를 저장(5로 초기화).
//int a=5의 경우 000......00101 (4byte)으로 저장
printf("%d", a);
// '변수(Variable) a'에 저장된 숫자 '5'를 출력, 서식지정자(format specifier) %d는 demical(십진법)의 약자 -> 정수
// printf format(서식, 형식을 출력하다라는 의미)
}
#2. 문자형 변수
#include <stdio.h>
main() {
char a= 35;
//35는 아스키 코드에서 #.
char b = '#';
printf("a = %c", a);
printf("b = %c", b);
// 따라서 둘의 결과는 같다.
}
변수 이름 규칙
- 변수 이름은 숫자로 시작할 수 없다. int a_3; (O), int 3_a; (X)
- 변수는 대/소문자를 구분한다. int a; 와 int A;는 다른 것
- C언어에서 예약된 키워드는 사용할 수 없다. int float(X) double int(X),
- 특수 문자는 변수이름에 들어갈 수 없다. int man&age (X)