아래 문장은... restart함수 포인터에 0 초기 값을 할당하는 건가요? (void (*)(void))의 의미를 어떻게 해석해야 할지..
void (*restart)(void) = (void (*)(void))0x0;
다음과 같이 하면 보기가 쉬울까요? (아마 다음과 같은 식이 될 것 같네요..)
typedef void(*PF)(void); PF restart = (PF)0x0;
void 타입의 함수포인터에 NULL을 할당하는게 맞습니다.
흠흠... 타입을 맞춰주는데 이유가 있는건가요?
보통 0번지에 boot이미지가 있지 않나요? restart()함수 구현을 boot loader로의 점프로 구현한듯 싶습니다만..
포인터타입의 상수0의 경우 언제나 널포인터가 됩니다. C++의 경우 NULL이라는 것을 쓰지 않는 방향으로 프로그래밍 되어 왔고, 따라서 implicit하게 0의 대입의 경우 컴파일시 warning을 띄울 수 있으므로, 타입캐스팅을 하게 됩니다.
또한 이 널포인터는 0번지와는 아무련 상관이 없습니다. 0번지를 사용하는 system의 경우 별도의 접근 가능한 방법을 두거나 합니다. 항상 포인터타입의 상수 0는 널포인터를 의미합니다.
네, 윗 분의 말씀이 맞습니다. 포인터 변수에 상수 0을 대입하는 것은 NULL 값을 대입하는 것과 같습니다.
(void (*)(void))은 명시적으로 형 변환을 지시하는 것이지만, 이 경우엔 생략되어도 무방할 것 같습니다. 컴파일러에 따라 경고가 나올 수도 그렇지 않을 수도 있습니다. 0번지와는 관련없습니다.
- Why don't you come in weird? I hope you come together.
-- I think to myself...what a emerging world.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
다음과 같이 하면
다음과 같이 하면 보기가 쉬울까요?
(아마 다음과 같은 식이 될 것 같네요..)
그러니까
void 타입의 함수포인터에 NULL을 할당하는게 맞습니다.
흠흠... 타입을
흠흠...
타입을 맞춰주는데 이유가 있는건가요?
보통 0번지에
보통 0번지에 boot이미지가 있지 않나요?
restart()함수 구현을 boot loader로의 점프로 구현한듯 싶습니다만..
포인터타입의 상수 0의 경우
포인터타입의 상수0의 경우 언제나 널포인터가 됩니다. C++의 경우 NULL이라는 것을 쓰지 않는 방향으로 프로그래밍 되어 왔고, 따라서 implicit하게 0의 대입의 경우 컴파일시 warning을 띄울 수 있으므로, 타입캐스팅을 하게 됩니다.
또한 이 널포인터는 0번지와는 아무련 상관이 없습니다. 0번지를 사용하는 system의 경우 별도의 접근 가능한 방법을 두거나 합니다. 항상 포인터타입의 상수 0는 널포인터를 의미합니다.
네, 윗 분의 말씀이
네, 윗 분의 말씀이 맞습니다.
포인터 변수에 상수 0을 대입하는 것은 NULL 값을 대입하는 것과 같습니다.
(void (*)(void))은 명시적으로 형 변환을 지시하는 것이지만,
이 경우엔 생략되어도 무방할 것 같습니다. 컴파일러에 따라 경고가 나올 수도 그렇지 않을 수도 있습니다.
0번지와는 관련없습니다.
- Why don't you come in weird? I hope you come together.
--
I think to myself...what a emerging world.
댓글 달기