Sempre usei 0 e *nunca* tive problemas, acho C'ismo pensar que usar 0 ao invés
da macro NULL seja algo amador. Para não dizer que estou sozinho, o pessoal do
KDE[1] também usa 0 ao invés de NULL, bem, na verdade eles recomendam que você
use o que achar melhor, por que em C++ isso acaba sendo uma questão de
preferência pessoal e não técnica, eis a explicação deles:
You may notice that null pointers are marked variously in one of three ways:
0, 0L and NULL. In C, NULL is defined as a null void pointer. However, in C++,
this is not possible due to stricter type checking. Therefore, modern C++
implementations define it to a "magic" null pointer constant which can be
assigned to any pointer. Older C++ implementations, OTOH, simply defined it to
0L or 0, which provides no additional type safety - one could assign it to an
integer variable, which is obviously wrong.
In pointer context, the integer constant zero means "null pointer" -
irrespective of the actual binary representation of a null pointer. This means
that the choice between 0, 0L and NULL is a question of personal style and
getting used to something rather than a technical one - as far as the code in
KDE's SVN goes you will see 0 used more commonly than NULL.
Note, however, that if you want to pass a null pointer constant to a function
in a variable argument list, you *must* explicitly cast it to a pointer - the
compiler assumes integer context by default, which might or might not match
the binary representation of a pointer. Again, it does not matter whether you
cast 0, 0L or NULL, but the shorter representation is generally preferred.
[1]
http://techbase.kde.org/Development/Tutorials/Common_Programming_Mistakes#NULL_pointer_issues
> Acho que o melhor mesmo seria padronizar um nullptr, como está sendo feito,
> só que a preocupação da maioria é que já seja tarde demais para isso agora
> que o NULL está consolidado e presente em quase todo lugar.
>
> André.
>
--
Hugo Parente Lima
INdT - Instituto Nokia de Tecnologia
--
Hugo Parente Lima
INdT - Instituto Nokia de Tecnologia
"Precisamos de mais gênios humildes no mundo, hoje somos poucos!"
From: ccppb...@googlegroups.com [mailto:ccppb...@googlegroups.com] On Behalf Of Joaquim Junior
Sent: Thursday, April 22, 2010 3:25 PM
To: ccppb...@googlegroups.com
Subject: Re: [ccppbrasil] Re: NULL vs 0
Sei... NULL só é ((void*)0) quando __cplusplus não está definido,
por isso eu disse "Não há diferença no C++", não entrei na questão
da linguagem C.
E quanto ao __null, o que ele é? Alguem aqui no grupo disse que pode
ser 0L, que diferença faria pro compilador entre isso e o literal 0?
No entanto, se há diferença, então é mais um ponto para o NULL, pois
aí é o compilador que decide o que é mais adequado para representar
um ponteiro nulo.
No meu projeto que está aberto agora, está sendo definidocomo '__null'. Em outras plataformas (SH4 acho), recebo((void*)0), e em alguns mais raros, 0.
O ((void*)0) não costuma ser utilizado no C++ porque a linguagem,
pelo penos no padrão, não suporta conversão automática de void* para
outros tipos de ponteiro.