int Foo(int ,int ); //"이와 같은 함수가 있다." - Foo라는 명칭에 대한 선언문
// "Foo라는 함수명은 이러한 매개변수와 이러한 리턴형식을 갖는다." -Foo라는 명칭의 signature 정의문
int Foo(int a,int b) //"이 함수는 이러한 코드를 수행한다." - (해당 함수에서 하는 연산 행위에 대한) 정의문
{
return a+b;
}
#define MAX_STU_NUM 50 //"MAX_STU_NUM이 있다.", "MAX_STU_NUM을 50이라 정의한다." -선언문이면서 정의문
struct _Foo//"struct _Foo는 다음과 같은 멤버로 구성됨을 정의한다." - 정의문
{
int m; //"이러한 멤버가 있다." - 선언문
};
int i; //?
"이러한 변수가 있다."라는 시각에선 선언문이다. - 변수명에 대한 선언문
"변수 i의 형식은 int이다."라는 시각에선 정의문이다. - 변수명의 형식에 대한 정의문
또한, 변수는 선언으로 인해 메모리를 할당 받게 되며 이는 어떠한 값이든 갖게 됨을 의미한다. 즉, 전역 변수일 경우에는 변수명 선언과 동시에 값이 0으로 정의가 되는 것이고 지역 변수일 경우에는 선언과 동시에 gabage value로 정의가 되는 것이다.
그러므로 변수를 선언한다는 것은 변수명을 선언한다는 것이 좀 더 정확한 표현이며 "변수명의 형식을 정의한다." 혹은 "변수명을 위해 할당된 공간에 값이 ~으로 정의된다."라고 얘기할 수도 있다.
이러한 용어의 혼돈을 피하기 위해서 변수명을 선언시 값을 정의하는 것을 초기화라고 부른다.
그리고 변수의 선언문 이외에 변수의 값을 변경하는 것을 대입(Assign, 변수에 식값 혹은 상수값을 할당)이라 한다.
Look & Feel & Think
|
통합 개발환경에서 나오는 에러메시지는 재정의에 대한 언급만 나와있지만 분명하게 '재정의. 기본형식이 다릅니다.'라는 설명이 있다.
MSDN을 살펴보면 '식별자를 이미 선언했습니다.'라는 사실을 추가적으로 발견할 수 있다.
여기서 중요한 사실은 본인이 바라보는 논리적인 자대가 있어야 될 것이며 이를 일반화하여 상위ontology와 부합될 수 있도록 노력하는 자세가 중요할 것이다. 이러한 노력을 통해 자신과 다른 시각으로 바라보거나 인식하는 것을 포용을 하여 하나의 ontology속에서 생존할 수 있다는 것이 부족한 설명에 대한 저자의 핑계이자 소견이다.
☞오해에 대한 우려
class Foo
{
const int cv = 5; //①
};
const int Foo::cv; //②
①은 선언문인가? 정의문인가? 초기화 구문인가?
"class Foo스코프에 cv라는 것이 있으며 정의되어 질 때 5로 초기화 해 달라." 는 의미이므로 선언문이 맞다.
②는 선언문인가? 정의문인가? 초기화 구문인가?
"실제 Foo스코프에 선언한 ①은 ②이다." - 정의문
이미 ①에 의해 선언된 것을 나타내어 메모리를 할당을 받아 선언문에 명시된 초기값으로 정의가 되어지는 것이다.
Effective C++3판에 이에 대한 해석에 대한 질문을 종종 받을 때가 있다.
☞에피소드
학생 - "강사님, 이 책에는 강사님이 쓰는 정의와 선언이 거꾸로 나온 것 같습니다."
지기 - "강사님은 int i; 를 읽을 때 'int형식의 변수 i를 선언하였다.'라고 하지 않습니까?"
학생 - "이 책에는 const int Foo::cv;구문을 정의문이라고 되어 있는데..."
지기 - "분명히 Effective C++의 번역은 정확한 표현임에 틀림이 없고 내가 읽은 것도 틀림이 없는데"
학생 - "OTL"
'개인 취미 > 언제나 휴일1(IT 소설)' 카테고리의 다른 글
16.성장통 (0) | 2009.08.19 |
---|---|
15.철학의 이해 (0) | 2009.08.19 |
14. return jg; (0) | 2009.08.19 |
13. 어느날 문득 (0) | 2009.08.19 |
12. 행복 (0) | 2009.08.19 |
10.시연회 (0) | 2009.08.19 |
9.운수없는 날 (0) | 2009.08.19 |
8.넙치 - 첫째달 (0) | 2009.08.19 |
6. 족구, 비발디 하우스 그리고 17기의 서막 (0) | 2009.08.07 |
5. Go GO 비발디 하우스 (0) | 2009.07.24 |