목록전체 글 (158)
Nagie's DevStory
앞글에서 변수와 상수의 사용법을 설명과 함께 알아봤다. 변수와 상수를 사용하다 보면 정수뿐만 아니라 실수 또는 문자나 문자열까지 담아야 할 상황이 생긴다. 상황에 맞게 값을 저장하려면 내가 담으려는 값의 타입이 어떻게 되는지 알고 있어야지 손실 없이 불러오고 저장을 할 수 있을 것이다. 데이터 타입 ( Signed ) 용량 저장 범위 정수 short 2Byte (16bit) -32,768 ~ 32,767 int 4Byte (32bit) -2,147,483,648 ~ 2,147,483,647 long 4Byte (32bit) -2,147,483,648 ~ 2,147,483,647 long long 8Byte (64bit) -9,223,372,036,854,775,808 ~ 9,223,372,036,854,..

앞서 변수와 상수의 기본 사용법을 알아봤다. 그럼 내가 생성한 변수를 CPU는 어떻게 내가 만든 변수라고 판단하고 데이터를 불러오는 것일까? 눈치 빠른 사람은 전 글에서 예시로든 소스 코드를 보고 알아차렸을 것이다. #include int main () { int A = 10; } 위의 코드를 보면 A라는 이름을 가진 변수를 하나 선언했는데 우리가 일상생활에서 물건을 정리할 때 쓰는 수납 바구니를 생각하면 이해가 빠를 것이다. 수납 바구니에 물건을 정리할때 다른 물건과 뒤섞이지 않게 이름표를 붙여 물건들을 수납하듯 변수도 똑같다. 간단한 예시를 하나 들자면 잘 읽지 않거나 다 읽은 책들을 창고에 넣어야 한다는 상황이라 가정해 보자. 책을 담는 수납용 바구니에 보통은 책만 넣지 다른 물건들을 넣지는 않을 ..

변수는 수정할 수 있는 데이터를 보관하기 위한 상자와 같다. 예를 들어 사과를 담을 수 있는 상자 A가 있다고 가정을 해보자. 상자에 10개의 사과가 있다고 치고 추가로 10개의 사과를 넣게 된다면 상자에 있는 사과의 총개수는 어떻게 될까? 그렇다 사과의 개수는 20개가 된다. 위의 예시를 코드로 나타내면 아래와 같다. #include int main ( ) { int A = 10; A += 10; printf_s("%d" , A); } 이처럼 값을 변경할 수 있는 데이터를 담는 곳을 변수라고 한다. 그와 반대로 값을 변경할 수 없는 데이터를 담는 곳을 상수라고 한다. 그렇다 수학에서 정의하고 있는 '값이 변하지 않는 불변량'과 프로그래밍에서의 상수는 동일한 의미를 가진다. 그러므로 상수는 값을 아무리 ..
옛날에 C언어를 배운 사람이라면 꼭 한번씩 봤을만한 코드가 있다. #include void main () { } 또는 #include main () { } 10여 년 전 C언어를 처음 배우면서 왜 이렇게 쓰는지 궁금했었는데 최근 다시 C언어를 공부하면서 이것저것 검색해 보니 해당 코드는 비표준 코드였다. 당시에 void 형으로 main() 함수를 작성하면 return 0;를(을) 생략할 수 있었다고 많이들 사용했다고 하는데 이건 컴파일러가 친절해서 어느 정도 수용해 준 거지 C의 표준안에는 없는 작성법이며 심지어 C99부터 int 형으로 반환하더라도 return 0;를(을) 생략할 수 있다. #include int main ( int argc, char** argv ) { print..
전 글에서 작성한 코드 중에 printf를 사용하지 않고 printf_s를 사용한 이유를 설명하려고 한다. 우선 printf는 C99 문법이라 상당히 오래된 역사가 있고 세월이 흐름에 따라 보안 취약점과 버퍼 오버플로우 같은 문제점이 발견되어 안정성이 떨어지므로 C11에서 보안 취약점과 버퍼 오버플로우 문제를 해결한 printf_s를 추가했다. 그래서 개선된 게 있다면 당연히 개선된 걸 쓰는게 맞다 생각해 printf 대신 printf_s를 사용했다. 물론 C11을 사용하지 않고 C99를 사용하는 환경에선 printf_s를 사용해선 안 되며 최신 IDE에서 굳이 안정성이 떨어지는 구문법을 사용하겠다면 #define _CRT_SECURE_NO_WARNINGS 위의 코드를 소스 첫줄에 삽입 하는걸로 경고나 ..