On Fr, 2011-06-24 at 12:24 +0200, Murray Cumming wrote:
On Fri, 2011-06-24 at 11:41 +0200, Patrick Ohly wrote:
> commit 581339e3b2c0a4492a4c92d765af12a9158d85f6
> Author: Murray Cumming <murrayc(a)murrayc.com>
> Date: Wed Jun 15 11:08:43 2011 +0200
>
> dbus-server: Do not use NULL in C++ code.
>
> NULL does not meant the same thing in C as in C++. It can lead to
> hard-to-debug problems.
>
> Why should NULL not be used? It can't be the (void *)0 definition as
> in
> C, but both 0 (the generic C++ null pointer) or g++'s __null [1]
> should
> be fine.
Firstly, this is my commit, not Chris's. It's a pet thing of mine.
I know. I didn't mention it explicitly because of Author: field.
> I personally like to use NULL because it makes C and C++ code
more
> consistent and as additional indicator that a type is a pointer.
But NULL is not a pointer in C++. It is in C.
> [1]
http://gcc.gnu.org/onlinedocs/libstdc
> ++/manual/bk01pt02ch04s03.html
NULL is a particular problem when calling varargs functions, passing
NULL as a sentinel, and then it's a hard one to debug. I personally
prefer to clean all NULLs out of code to make it impossible for that to
ever happen.
In other words, NULL works as long as it is defined to __null but fails
in this case on 32 bit systems when it is 0? And you prefer to write
(void *)0 (when needed) or just 0 (when not)?
Okay, I see how that can be tricky because using NULL is a portability
problem: works on our test platform, may fail elsewhere.
I believe this is why C++0x has nullptr:
http://en.wikipedia.org/wiki/C%2B%2B0x#Null_pointer_constant
If you don't like the change, we don't have to have it. It's a very
minor thing.
I'm undecided ;-) If we ban NULL, we would have to do it consistently.
--
Best Regards, Patrick Ohly
The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.