문제

~ 안에 이 질문 이니셜 라이저는 NULL로 포인터를 설정하는 데 사용됩니다. 값을 사용하는 대신 0 가치 0L 사용. 나는 정확히 사용해야한다는 것을 읽었습니다 0 정확한 NULL 포인터 표현이 구현 별이므로 NULL 포인터의 경우.

사용할 수 있습니다 0L 포팅하는 동안 NULL 원인 문제에 대한 포인터를 설정하려면?

도움이 되었습니까?

해결책

표준 (4.10.1)에서 :

널 포인터 상수는 정수 유형의 통합 상수 표현 (5.19) rvalue입니다.

그래서 나는 추측한다 0L 괜찮습니다.

다른 팁

제 생각에는 0L 당신이 할당하는 포인터 유형이 길고 크기와 같은 크기라고 믿는다는 사실을 제외하고는 괜찮습니다.

나는 사용한다고 생각한다 NULL 훨씬 더 명확합니다.

C ++ 0X에는 새로운 NULL 포인터 상수가 있습니다. nullptr 유형의 nullptr_t. 모든 포인터 유형으로 암시 적으로 변환 될 수 있습니다.

그때까지 나는 NULL을 사용하는 것이 좋습니다. 그러나 0과 0L은 내가 들어 본 모든 구현에서 작동합니다.

나는 당신에게 정확한 답을 줄 수는 없지만, 당신의 질문에 대한 정확한 답변이 무엇인지에 관계없이, 포인터를 초기화하는 아이디어 자체는 0L 포인터가 long, 반드시 사실은 아닙니다.

컴파일러가 그것을 받아들이는지 아닌지, 그리고 그것이 안전한지 아닌지에 관계없이 유효하지 않은 아이디어를 제안하기 때문에 그렇게하지 않을 것입니다.

NULL 포인터 표현은 구현에 따라 다르지만 0 또는 0L은 반드시 구현이 아닙니다. 사용자가 NULL 포인터를 지정할 수있는 방법 일뿐입니다.

나는 Bjarne Stroustrup이 여러 번 그의 선호가 평원 0 (그리고 null이 아닌)을 사용하는 것이라고 지적했다.

나는 NULL을 사용하는 것을 추천하는 사람들과 동의하지 않지만 세 가지 명시된 옵션 중 하나는 실제로 효과가 있습니다. 관용적 인 C ++에서 표준 선택은 0입니다 (아마도 Stroustrup의 선호도이기 때문일 것입니다. http://www2.research.att.com/~bs/bs_faq2.html#null).

0L은 0과 같은 방식으로 적절한 포인터 유형에 암시 적으로 캐스트됩니다. 그것은 조금 이상하게 보이고 실제로 Jesper가 준 이유 때문에 실제로 큰 의미가 없습니다 ..

당신이 사용할 수있는 false, 0, 0l, 0L, 0ul, 0u, 00, 또는 문자 0을 나타내는 여러 가지 방법. 문자 0은 기본적으로 널 포인터 상수에 해당하는 마법의 기호입니다.

우리가 약간의 값에 대해 이야기하고 있다면 코드가 포인터를 통해 그것을 memcpy-ening했다면, 위에서 언급 한 문제가있을 것입니다.

보너스 질문 : 어떤 유형은 널 포인터 상수가 약간 제로가 아닌가?

나는 null이라고 말한 모든 사람에게 동의해야 할 것입니다. 0을 사용하는 것을 선호하는 사람들에게 내 의견은 당신의 코드가 그것이 의미하는 바를 말해야한다는 것입니다. 원하는 결과는 널 포인터이므로 코드는 그렇게 말해야합니다. 비교를 할 때 더 의미가 있습니다.

if (some_variable == NULL) { ... }

보다 훨씬 명확합니다

if (some_variable == 0) { ... }

32 비트 포인터에 대한 긴 정수 (64 비트) 0L 할당은 문제를 일으킬 수 있습니다. 언급 된 다른 게시물에서와 같이 NULL을 사용하여 Initializse 포인터를 0으로 0으로하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top