Eat Study Love

먹고 공부하고 사랑하라

SW 만학도/C

2. Variables in C

eatplaylove 2024. 3. 20. 21:19

 

아무리 봐도 불친절한 C..

 

파이썬을 배우다가 와서 그런가 불편한 게 이만 저만이 아니다.

 

그래도 파이썬코드보다 처리속도도 빠르고, 디버깅에 유용하다니까 감내해야지

 

Review

https://eglife.tistory.com/31

 

1. Hello C !!! Sorry for late..

C 랑 C++도 구분 못하고 살아왔다. 둘이 그냥 같은 것인줄.. 그래도 이왕 코딩공부하기 시작한 거, C도 기초부터 차근차근 밟아보기로 한다. First C Program #include int main(void) { printf("Hello C\n"); return 0;

eglife.tistory.com

 

C의 Compiler == Python의 Interpreter

 

C는 Compiler로 '번역'만 해주고, 바로 실행되는 exe라는 파일을 만든다.

 

Interpreter는 '번역' + '실행'까지 해준다.

 

장단점을 알아보자

 

프로토타입을 만들 때처럼 빨리 빨리 코드 한 줄 한 줄의 결과를 알고 싶다면? --> Python

 

Compiler는 그런거 없다. 전체를 번역해야해서 모든 줄에 Error가 없어야 한다. 즉, 일부 Line의 결과만 확인하는 것이 어렵다. 즉, 개발단계에선 번거롭다.

 

장점은, 이미 번역된 파일을 실행만하면 되어서 실행속도가 엄청 빠르다. 번역까지가 귀찮은 것.. 번역만 하자! 그러면 번역이고 뭐고 이제 실행할 일만 남았다.

 

그리고 C는 전체 프로그램이 Main함수에서 시작해서 Main함수에서 끝난다.

 

그 외 나머지 요소들은 다 Main함수에서 Call되는 용도이니까, 프로그램의 실행은 Main함수 안에 구현된 코드에 집중하면 된다.

 

 

다시 Go back to C variable!!!

 

 

Variables

 

- 이름과 Value가 묶여있는 형태. Moemory Object의 최소공간

 

- 오직 사람을 위해서 Variable에 Naming을 해주는 것. 사실 컴퓨터는 Variable 이름 같은 건 필요가 없다 ㅎㅎ

 

- Compiler가 필요로 하는 Variable 정보 :

 

  1) Name

  2) Data Type - Data type에 따라 Size가 달라서 Memory공간을 달리 생각해야함

  3) Scope - Name Space in Python, 이 Variable이 어디서 어디까지 살아 있다가 언제 사라지는 지?

  ( 존재할 때만 Memory에 넣고 죽으면 Memory에서 빼게)

 

  - 위 모든 것들이 Variable을 선언할 때 다 설정해줘야 함(프로그래머 입장에선 좀 번잡스러워진.. ㅠ)

 

 

Data Type

다양한 Data Type, 숙지가 필요하겠다

 

 

 

- Python과 가장 다른 점! 모든 변수 선언 시, 위와 같이 Variable의 Data Type을 선언해주어야 한다.

 

#include <stdio.h>

int main(void)
{
    int integer;
    printf("size:%d\n",sizeof(integer)); /*
    8bit =1, 16bit = 2 sizeof 함수의 단위는 바이트다
    ( 1bite = 8bit )*/ 


    return 0;
}

---------------------------------
size:4

 

 

- ex) Int size는 4 --> 4바이트 --> 32비트다.

 

#include <stdio.h>

int main(void)
{
    int integer;
    printf("int size: %d\n",sizeof(integer));

    char charvar;
    printf("char size: %d\n",sizeof(charvar));

    float floatvar;
    printf("float size: %d\n",sizeof(floatvar));

    double doublevar;
    printf("double size: %d\n",sizeof(doublevar));
    // Double은 좀 더 정확한 소수표현을 위한 Data type

    _Bool boolvar;
    printf("_Bool size: %d\n",sizeof(boolvar));
    // 엄밀히 말하면 1bit로도 되지만 sizeof 는 1byte단위로 계산하여서 1byte 이하는 그냥 1byte 취급

    return 0;
}
--------------------------------
int size: 4
char size: 1
float size: 4
double size: 8
_Bool size: 1

 

 

- Python과 달리 C에서 _Bool Type의 경우 True or False를 값으로 받지 않고, 0 또는 1을 받는다.

 

- 만역에 T/F를 받는 Bool type을 쓰고 싶다면 bool flag = True or False를 할 수 있는데

 이 땐 Header로 #Include <stdbool.h>을 선언해줘야 한다.

 

#include <stdbool.h>
#include <stdio.h>


int main(void)
{
    bool boolvar1 = true;
    bool boolvar2 = false;

    // C에서 Boolean으로 T/F를 나타날 땐 t,f 소문자다.. 주의!

    printf("%d,%d \n",boolvar1,boolvar2);
    printf("%s\n",boolvar1? "true":"false"); //구글링..
    fputs(boolvar2? "true":"false",stdout); // 구글링.. 얘는 뭐지


    return 0;
}
----------------
1,0 
true
true

 

 

- 기본적으로 C에선 _Bool , bool type은 True, False 출력을 지원하진 않는다. 그냥 1(True) , 0(False)으로 출력

 

- Int type엔 short / long term을 할당할 수 있다. 작은 / 큰 정수를 나눠서 선언함으로서 메모리사용량을 최적화

 

- Python보다 Data type customize가 자유롭다

 

#include "stdio.h"

int main(void)
{
    int intvar;
    short int sintvar;
    long int intvarl;
    long long int intvarll;
    
    printf("int: %d\n",sizeof(intvar));
    printf("sint: %d\n",sizeof(sintvar));
    printf("lint: %d\n",sizeof(intvarl));
    printf("llint: %d\n",sizeof(intvarll));

    return 0;
}
----------------------------
int: 4
sint: 2
lint: 4
llint: 8

 

 

- Unsigned int : 내가 이 Variable은 무조건 0이상의 정수만을 표시할 것이다! 할 때 쓰는 표현. Memory공간을 아낀다.

 

#include "stdio.h"

int main(void)
{
    unsigned int unint;
    printf("unsigned int size : %d\n", sizeof(unint));
    return 0;
}
--------------------------
unsigned int size : 4

 

 

Scope

 

- Variable이 살아있는 공간

 

- Compiler는 이 Variable이 Code 안에서 어디쯤에 선언되었는지에 따라 Scope를 설정한다.

 

  -ex) 만약에 어떤 변수가 특정 함수 안에서 선언되었다면, Compiler는 그 함수가 끝날 때 Variable을 없애준다.

  (Local Variable)

  -ex) 만약에 Global Variable이면 전체 프로그램동안 살아 있는 Var들이라 Scope를 달리 가져간다.

∴ 특정 중괄호{ } 안에서 선언된 Variable들은 그 괄호를 벗어나면 사라진다 --> 이것이 Scope

 

Initializer

 

- int의 경우 Initialize를 해주지 않으면, global var의 경우 0, local val의 경우 임의의 값이 반환된다.

- 헷갈리는 경우를 방지하기 위해 initialize는 꼭 해주자.

 

- Constant를 만들어주는 또 다른 방법이 있다.

 

 

 

- #define의 경우 global한 Scope를 적용시켜야 하는데, const를 이용하면 local하게 상수 사용가능하다.

 

 

 

 

'SW 만학도 > C' 카테고리의 다른 글

5. Pointer - Motivation in C  (1) 2024.03.26
4. Function ic C - Grammer  (1) 2024.03.25
3. Control Structures in C - Condition ( While / For Loop )  (0) 2024.03.25
2-1. Operators / Memory in C  (0) 2024.03.20
1. Hello C !!! Sorry for late..  (2) 2024.03.19