
정의는 대부분의 시나리오에서 자동으로 선언입니다. 이제 상세한 비교 차트를 사용하여 정의와 선언의 차이점을 이해해 봅시다.
비교 차트
비교 근거 | 정의 | 선언 |
---|---|---|
기본 | 변수, 함수 또는 클래스에 저장된 값을 결정합니다. | 변수, 함수, 클래스 등의 이름과 유형을 지정합니다. |
메모리 할당 | 발생 함 | 자리를 잡지 못합니다. |
되풀이 | 일단 정의 된 문장은 다시 정의 할 수 없습니다. | 재 선언은 쉽게 가능합니다. |
범위 | 기간 결정됨 | 가시성이 지정되었습니다. |
정의의 정의
정의 는 변수, 함수, 클래스 등의 이름과 관련된 코드 또는 데이터를 식별합니다. 선언 된 엔티티의 저장 영역을 할당하기 위해 컴파일러가 반드시 정의해야합니다. 변수가 정의되면 해당 변수에 대한 몇 바이트의 메모리로 구성됩니다. 함수 정의는 함수에 대한 코드를 생성합니다. 정의가 프로그램 요소의 고유 한 스펙이므로 프로그램 요소를 프로그램에서 한 번만 정의 할 수 있습니다. 선언과 정의의 관계는 일대 다 일 수 있습니다.
경우에 따라 프로그램 요소를 정의 할 수는 없지만 선언 할 수는 있습니다. 예를 들어 함수가 호출되지 않거나 선언 된 경우에도 해당 주소가 사용되지 않을 때입니다. 또 다른 예는 클래스 정의가 선언되어야하는 동안 사용되지 않는다는 것입니다.
선언의 정의
선언 은 변수, 함수, 네임 스페이스, 클래스 등의 이름을 프로그램에 지정하는 데 사용됩니다. 선언없이 프로그램에서 이름을 사용할 수 없습니다. 프로그램 요소는 정의와 달리 여러 번 선언 할 수 있습니다. 여러 선언은 동일한 형식을 사용하여 여러 선언을 수행해야만 달성 할 수 있습니다. 선언은 컴파일러의 관점에서 프로그램 요소에 대한 가시성을 제공하는 매체입니다.
선언문은 정의의 목적을위한 것이며, 아래에 주어진 조건이 암시되지 않는 경우에만 가능합니다.
- 정적 데이터 멤버가 클래스 선언 내에서 선언 된 경우이 경우 선언이 아닙니다. 왜냐하면 클래스의 모든 객체에 대해 하나의 복사본 만 생성하고 정적 데이터 멤버는 제공된 클래스 유형의 객체의 구성 요소이기 때문입니다.
- 선언이 typedef 문인 경우.
- 변수는 이니셜 라이저 또는 함수 본문없이 선언되지만 extern 지정자를 포함합니다. 이 정의는 다른 함수에 대한 정의 일 수 있으며 외부 연결이라는 이름을 제공함을 나타냅니다.
- 클래스 T와 같은 정의를 포함하지 않는 클래스 이름 선언.
일반적으로 선언은 범위 에서 발생합니다. 범위는 선언 된 이름의 가시성과 정의 된 객체 기간을 결정합니다.
정의와 선언의 주요 차이점
- 프로그램 요소의 정의는 해당 요소와 연관된 값을 판별합니다. 반면에, program 요소의 선언은 컴파일러의 이름과 유형을 지정합니다.
- 프로그램 요소의 정의는 메모리 양을 예약하고 선언은 메모리 할당을 포함하지 않습니다.
- 프로그램 요소는 여러 번 선언 할 수 있습니다. 반대로, 정의는 코드 또는 데이터로 구분할 수있는 프로그램 요소의 이름을 가진 고유 한 사양을 포함합니다.
- 선언의 범위는 변수, 함수, 객체, 클래스, 열거 등의 가시성을 설명합니다. 반대로 정의에서는 범위가 기간과 관련됩니다.
정의 예
- 변수 정의 및 선언 :
int r = 10;
- 함수 정의 :
int add (int x, int y) {int a; a = x + y; a를 돌려 보내십시오; }
선언의 예
- 변수 선언 :
extern int r;
- 함수 선언 :
int add (int p1, int p2);
결론
선언 프로세스는 프로그램 요소를 컴파일러에서 볼 수 있도록하기 위해 사용되며 메모리를 할당 할 필요가 없습니다. 역 정의는 저장소를 예약하는 선언입니다. 즉 컴파일러가 선언 된 엔터티의 메모리 공간을 예약합니다.