성명 과 정의 의 차이

함수 의 성명 과 정 의 는 일반적으로 쉽게 구분 된다.일반적인 유형의 변수의 성명 도 정의 이지 만 extern 과 관련 될 때 헷 갈 리 기 쉽다.
일반적으로 설명 은 컴 파일 러 에 이러한 식별 자가 존재 한 다 는 것 을 알려 주 는 것 이다.정 의 는 프로그램 에 메모 리 를 신청 하 는 것 입 니 다.
예 를 들 면:

  
  
  
  
  1. int x; //    
  2. extern int x; //    
  3. int x = 10; //   

프로그램 에서 extern int x = 10 을 사용 하 는 것 도 정의 입 니 다.따라서 같은 프로젝트 에서 extern int x = n 의 문 구 는 한 번 만 나타 날 수 있 습 니 다. 그렇지 않 으 면 중복 정의 입 니 다.하지만 여러 차례 밝 힐 수 있다.
성명 의 동작 은 일반적으로 헤더 파일 에 사 용 됩 니 다. 그러면 여러 원본 파일 에서 같은 변 수 를 참조 할 수 있 습 니 다.이 는 왜 정 의 를 사용 할 수 없 는 지 를 보 여 준다.헤더 파일 에 원본 파일 이 포 함 된 후 사실상 원본 파일 의 일부분 이 되 었 기 때문이다.
따라서 헤더 파일 에서 변 수 를 정의 하면 여러 원본 파일 에서 이 변수의 정의 가 나타 납 니 다.이른바 중복 정의 다.
위 에서 말 한 것 은 헤더 파일 에서 변 수 를 정의 할 수 없습니다.하지만 세 가지 예외 가 있다.헤더 파일 은 클래스, 값 을 컴 파일 할 때 알 수 있 는 const 대상 과 inline 함 수 를 정의 할 수 있 습 니 다.
헤더 파일 에서 이 실 체 를 정의 하 는 것 은 컴 파일 러 가 코드 를 만 들 기 위해 서 입 니 다.
예 를 들 어 클래스 를 정의 하고 사용 할 수 있 는 대상 의 코드 를 만 들 기 위해 컴 파 일 러 는 이 클래스 를 구성 하 는 데이터 구성원 을 알 아야 하고 이 대상 에서 실행 할 수 있 는 조작 도 알 아야 한다.클래스 의 정 의 는 이러한 정 보 를 제공 하기 때문에 헤더 파일 에서 클래스 를 정의 해 야 합 니 다.
const 변 수 는 기본적으로 파일 의 부분 변 수 를 정의 하기 때 문 입 니 다.따라서 여러 소스 파일 에 이 변수의 정의 가 나타 나 도 합 법 적 입 니 다.
1. const 변수 가 상수 표현 식 을 사용 하여 초기 화 할 때 초기 화 과정 은 헤더 파일 에서 이 루어 집 니 다.
2. const 변수 가 상수 표현 식 으로 초기 화 되 지 않 으 면 헤더 파일 에서 이 변 수 를 초기 화 할 수 없고 원본 파일 에서 이 변 수 를 정의 하고 초기 화 해 야 합 니 다.그리고 헤더 파일 에 extern 성명 을 추가 하여 여러 파일 에 공유 할 수 있 도록 합 니 다.
c / C + + 컴 파일 된 프로그램 이 사용 하 는 메모 리 는 다음 과 같은 몇 부분 으로 나 뉜 다.
1. 스 택 구역 (stack) - 컴 파일 러 에 의 해 자동 으로 분배 되 고 함수 의 매개 변수 값, 부분 변수의 값 등 을 저장 합 니 다.그 조작 방식 은 데이터 구조의 창고 와 유사 하 다.
2. 쌓 기 구역 (hep) - 일반적으로 프로그래머 가 배정 하여 방출 합 니 다. 프로그래머 가 풀 지 않 으 면 프로그램 이 끝 날 때 OS 에서 회수 할 수 있 습 니 다.데이터 구조 중의 더미 와 는 별 개의 일이 고 분배 방식 은 체인 테이블 과 유사 하 다. 하하.
3. 전역 구역 (정적 구역) (static) - 전역 변수 와 정적 변수의 저장 소 는 한 곳 에 놓 여 있 습 니 다. 초기 화 된 전역 변수 와 정적 변 수 는 한 지역 에 있 습 니 다. 초기 화 되 지 않 은 전역 변수 와 초기 화 되 지 않 은 정적 변 수 는 인접 한 다른 지역 에 있 습 니 다. -프로그램 종료 후 시스템 방출
4. 문자 상수 구역 - 상수 문자열 은 여기에 놓 여 있 습 니 다.프로그램 종료 후 시스템 에서 방출
5. 프로그램 코드 구역 - 함수 체 를 저장 하 는 바 이 너 리 코드.

좋은 웹페이지 즐겨찾기