프로그래밍이란?
Program + ing 말 그대로 프로그램을 만드는 것을 말한다.
일상적으로는 TV에서 PD가 프로그램을 제작하는 것 또한, 프로그래밍이라 볼 수 있으며, 우리가 PC에서 소프트웨어를 만드는 것 또한 프로그래밍이다.
프로그래밍을 만드는 것은, 하나의 예술 작품을 만드는 과정과도 같다고 볼 수 있다.
새로운 것을 개발하고 창조하는 과정이기 때문이다.
먼저 언어란, 사람과 사람과의 통신을 위한 수단이다.
그렇다면, 프로그래밍 언어는 사람과 컴퓨터 간의 통신수단이라 할 수 있다.
사람의 언어를 프로그래밍 언어로 변환(번역)한 후 기계어로 컴파일 하는 과정을 거친다.
※ 최근에는, 컴파일과 링크 과정을 하나로 합친, 빌드 과정을 사용하는 추세이다.
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
해당 코드에서, #include의 경우, js로 따지면 import의 개념으로, 기능을 불러오기 위해 사용한다.
C언어의 기본 구성요소는 함수로, 수학에서는 y=f(x), y= 2x 와 같은 함수를 사용한다면,
C언어는
int main(void) {
함수의 내용
}
다음과 같은 함수를 사용한다. 다음에서 f: main, x: void, y:int에 해당한다.
printf또한, 출력을 위한 C언어의 대표적인 함수이며, stdio.h에 정의되어 있다.
C언어는 자바스크립트와는 다르게, 문법이 엄격하여, (;) 세미콜론이 없을 경우, 에러가 나서 코드가 실행되지 않는다. 그 이유는 C언어는 인터프리터 방식을 사용하여, 세미콜론을 단위로 코드를 해석하기 때문이다.
또한 함수가 끝날 때, return 0;와 같은 리턴값을 가지며, 리턴값 0 자체는 의미가 없지만, 함수의 수행이 끝났음을 나타낸다.
// C언어에서는 짧은 주석의 경우 '//'를,
/*
여러줄어 걸쳐 설명해야 하는 긴 주석의 경우
다음과 같이 /* */안에 내용을 적는다.
*/
변수는 변경이 가능한 수를 의미하며, 어떤 값이 들어갈 지 예측할 수 없다.
메모리 상에 올라가 있는 수 많은 데이터를 구분하기 위해서 사용한다. 메모리의 주소값들을 사람들이 다 기억할 수 없기 때문이다. 이러한 주소값을 기억하기 보다는 의미있는 이름을 통해 기억하는 것이 쉽기 때문에 우리가 사용할 메모리 공간에 이름(식별자)을 부여하고 사용하기 위해 우리는 변수를 사용한다.
메모리 영역은 크게 다음 네가지로 나뉜다.
스택과 힙 영역은, FILO 방식을 사용한다.(First in Last Out)
자세한 내용 : https://velog.io/@geun99/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%8A%A4%ED%83%9D-%ED%81%90-%EB%8D%B1
(자바스크립트의 스택, 큐, 덱)참조
원시 타입(int, char 등)과 같은 데이터는 지정된 콜스택 메모리의 주소값이 저장되고, 변수 식별자는 콜스택 상의 실행 컨텍스트의 렉시컬 환경에 저장된다.
참조 타입(배열, 객체, 함수 포인터 등)과 같은 데이터는 메모리 힙의 주소값이 저장된 콜스택 주소값에 저장이 된다.
자료형이란?
선언한 변수가 차지하는 메모리 공간을 미리 결정해준다. 음식으로 따지면 종류에 따라 그릇이 달라지는 것과 비슷하다.
다음과 같은 다양한 자료형을 통해, 효율적인 메모리 공간을 활용할 수 있다.
#include <stdio.h>
int main()
{
int width = 10;
int height = 20;
printf("사각형의 넓이는 %d 이다.", width * height);
return 0;
}
다음과 같이, 변수를 선언할 때 먼저 자료형을 선언해주어야 한다.
자료형에 잘못된 변수를 넣을 경우 오류가 발생한다.
상수는 변하지 않는 수를 의미하며, 메모리 공간에 수는 존재하지만, 그 수를 변경할 수는 없다.
상수는 선언할 때 앞에 const를 붙여야 하며, 선언과 동시의 초기화 해줘야한다.
Good
const int TEN = 10;
Bad
const int TEN;
TEN = 10;
scanf는 사용자로부터 데이터를 입력받기 위한 함수로, 특이하게 해당 변수의 메모리 주소를 통해 변수를 입력 받는다.
#include <stdio.h>
int main()
{
int input = 0;
scanf("%d", &input);
printf("input : %d",input);
return 0;
}
입력 : 10
출력 : input : 10
우리가 입력한 10이라는 값은, input의 주소값를 통해 저장된다.
#include <stdio.h>
int main()
{
int input = 0;
scanf("%d", &input);
printf("result : %d",input * 5);
return 0;
}
입력 : 10
출력 : result : 50
#include <stdio.h>
int main()
{
char input;
scanf("%c", &input);
printf("result : %d",input);
return 0;
}
입력 : A
출력 : result : 65