범위, 전역변수, const

·2022년 5월 25일

C-Study

목록 보기
11/21

#20220525
chapter 45,46,47,48

#.45

  • 논리 연산자 &&와 ||의 경우 왼쪽 피연산자를 먼저 실행
    (왼쪽부터 -> 오른쪽)
    • 왼쪽 피연산자의 평가만으로 오른쪽 피연산자 평가 안함
      ex). hp++ || mp++
      왼쪽 피연산자가 참이면 오른쪽 연산자 평가안함
      ex). exp++ && atk++
      왼쪽 피연산자가 거짓이면 오른쪽 연산자 평가 안함
#include <stdio.h>
 
int main(void)
{
    int a = 0;
    int b = 3;
    int c = 1;
 
    if (--a && c++ || --b)
    {
        printf("It's true!\n");
    }
    printf("%d, %d, %d\n", a, b, c);
    
    return 0;
}

** 결과 -> It's true! -1 3 2
: 왼쪽부터 실행, a -1 = -1, c+1 =2 / a이고 c는 거짓이므로
--b 평가안함 3 즉 -1 3 2 출력

#46. 범위(scope)

  • 블록 범위와 변수 위치
    : 함수 중간에 블록을 열고 변수 선언 가능
    : 함수 시작 지점에 모든 변수를 선언하면 실수할 여지가 있음.
    : 블록을 이용해서 함수 중간에 선언하는 것도 하나의 방법
    : 모든 변수의 이름 다르게 지을 것!

  • 파일 범위에 있는 변수의 메모리 위치

    • 프로그램 실행 동안 공간을 차지
      - 스택 메모리에 들어가는 것이 아니라, 데이터 섹션에 들어감
      <전역변수>
  • 전역변수

  1. 지역 변수의 범위는 선언된 블록 내로 한정됨!
  2. 레이블은 함수 범위에 속한다.
  3. 안쪽 블록에서 바깥 블록에 접근할 수 있다.
  4. 전역 변수는 파일 범위에 있다.(스텍이 아닌 데이터 섹션)
    파일 내라면 어디서든 접근 가능하다.
  • #48. const 키워드
    const ! best!

    - 기본적으로 모든 변수에 const를 붙임 
    - 정말 값 변경이 필요한 변수에만 const 생략! 
     int rist(const int id) {
     ~~~ 
     int age = db_get_age(id);
     int amount; 
     
     id *= 2;              /*컴파일 오류남!*/
     
     }
     
     void update(int w, int h, int data[])
     {
     	int i=0
         const int area = w * h;
         
         # 지역변수를 const로 만들었기 때문에 더이상 바꾸지 않겠다 명시! 
         area = area+1;    /*컴파일 오류*/
     }
profile
Hakuna Matata

0개의 댓글