[에러] case 안에서 변수 선언 in C언어

2023. 6. 20. 15:55·IT/에러

발생

2023-06-20. Pint OS의 프로젝트 3. Anonymous Page 파트를 구현하다가 해당 에러가 발생했다. supplemental_page_table_copy() 함수 내에서 페이지 타입에 따라 처리를 해주기 위해 switch문을 사용하였는데 이때 case 안에서 변수를 선언한 것이 문제가 되었다.

평소 switch문을 쓸 때는 복잡한 구현을 할 일이 없어서 몰랐는데, 이번 기회에 알 수 있었다. 컴파일 버전에 따라 에러 여부가 갈리는 것 같다.

switch (type) {
    case VM_UNINIT:
        vm_initializer *init = src_page->uninit.init;
        void *aux = src_page->uninit.aux;
        vm_alloc_page_with_initializer (VM_ANON, upage, writable, init, aux);
        break;
    case VM_ANON:
    case VM_FILE:
        if (!vm_alloc_page (type, upage, writable)) {
            return false;
        }

        if (!vm_claim_page (upage)) {
            return false;
        }

        struct page *dst_page = spt_find_page (dst, upage);
        memcpy (dst_page->frame->kva, src_page->frame->kva, PGSIZE);
        break;
    default:
        return false;
}

솔루션

  • case 안에서 변수 선언하기
  • case에서 변수를 선언하려면 다음과 같이 {, }인 중괄호로 묶어주어야 한다.
  • Visual Studio 2017이나 Visual Studio 2015에서는 정상적으로 되지만 Visual Studio 2013이하 버전이나 GCC에서는 컴파일 에러가 발생한다고 한다.
switch (type) {
    case VM_UNINIT: {
        vm_initializer *init = src_page->uninit.init;
        void *aux = src_page->uninit.aux;
        vm_alloc_page_with_initializer (VM_ANON, upage, writable, init, aux);
        break;
    }
    case VM_ANON:
    case VM_FILE: {
        if (!vm_alloc_page (type, upage, writable)) {
            return false;
        }

        if (!vm_claim_page (upage)) {
            return false;
        }

        struct page *dst_page = spt_find_page (dst, upage);
        memcpy (dst_page->frame->kva, src_page->frame->kva, PGSIZE);
        break;
    }
    default: {
        return false;
    }
}

출처

  • https://dojang.io/mod/page/view.php?id=2146

'IT > 에러' 카테고리의 다른 글

[에러] 백준 런타임에러(OverflowError)  (0) 2023.06.20
[에러] form input 내에서 button 또는 submit할 때, 웹페이지 refresh되는 현상  (0) 2023.06.20
[에러] AJAX와 flask_jwt_extended로 로그인 유지하기  (0) 2023.06.20
[에러] 구름IDE에서 MongoDB 원격 접속 방법 및 에러  (0) 2023.06.20
'IT/에러' 카테고리의 다른 글
  • [에러] 백준 런타임에러(OverflowError)
  • [에러] form input 내에서 button 또는 submit할 때, 웹페이지 refresh되는 현상
  • [에러] AJAX와 flask_jwt_extended로 로그인 유지하기
  • [에러] 구름IDE에서 MongoDB 원격 접속 방법 및 에러
KimCookieYa
KimCookieYa
무엇이 나를 살아있게 만드는가
  • KimCookieYa
    쿠키의 주저리
    KimCookieYa
  • 전체
    오늘
    어제
    • 분류 전체보기 (574)
      • 혼잣말 (88)
      • TIL (2)
      • 커리어 (24)
        • Sendy (21)
        • 외부활동 기록 (2)
      • 프로젝트 (186)
        • 티스토리 API (5)
        • 코드프레소 체험단 (89)
        • Web3 (3)
        • Pint OS (16)
        • 나만무 (14)
        • 대회 (6)
        • 정글 FE 스터디 (16)
        • MailBadara (12)
        • github.io (1)
        • 인공지능 동아리, AID (5)
        • 졸업과제 (18)
        • OSSCA 2024 (1)
      • 크래프톤 정글 2기 (80)
      • IT (168)
        • 코딩 (4)
        • CS (18)
        • 에러 (5)
        • 블록체인 (23)
        • Front-End (39)
        • 알고리즘&자료구조 정리 (3)
        • 코딩테스트 (3)
        • BOJ 문제정리 (41)
        • WILT (12)
        • ML-Agents (4)
        • 강화학습 (1)
        • Android (0)
        • LLM (2)
      • 전공 (1)
        • 머신러닝 (1)
      • 자기계발 (20)
        • 빡공단X베어유 (2)
        • 독서 (15)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Velog
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    Pint OS
    numpy
    블록체인
    해커톤
    자바스크립트
    센디
    코드프레소
    pintos
    사이드프로젝트
    프로그래머스
    OS
    부산대
    docker
    핀토스
    react
    리액트
    Flutter
    글리치해커톤
    RNN
    NEAR Protocol
    MailBadara
    파이썬
    머신러닝
    크래프톤정글
    나만무
    딥러닝
    졸업과제
    JavaScript
    니어프로토콜
  • hELLO· Designed By정상우.v4.10.3
KimCookieYa
[에러] case 안에서 변수 선언 in C언어
상단으로

티스토리툴바