Re: invalid arguments to public API: g_assert, g_return_if_fail or continue with undefined behavior
- From: Federico Mena Quintero <federico ximian com>
- To: Christian Neumair <chris gnome-de org>
- Cc: desktop-devel-list gnome org
- Subject: Re: invalid arguments to public API: g_assert, g_return_if_fail or continue with undefined behavior
- Date: Tue, 13 Sep 2005 11:03:22 -0500
On Tue, 2005-09-13 at 12:48 +0200, Christian Neumair wrote:
> I'd really like to have a GNOME-wide policy for dealing with public API
> and invalid arguments.
The GNOME Programming Guidelines are pretty clear on this:
http://developer.gnome.org/doc/guides/programming-guidelines/robust.html
See the "Assertions and Preconditions" section on that page.
Summary: use g_return_*() in library entry points to ensure that no
garbage is fed into your library. Use g_assert() internally to ensure
that you are in a consistent state.
> If we feel like the traditional C route is good,
> we can remove all of these codeblocks for the sake of performance. I
> think some of the asserts/return_if_fail statements were left out for
> exactly that reason. I suppose this has a measurable performance impact
> for little helpers that are often called.
As Chris says, one needs to measure this first.
The g_return_*() and g_assert*() macros use G_LIKELY when compiled with
GCC; this helps the processor in predicting the right branches.
We can't really ship with checks disabled until a good test run produces
zero warnings in ~/.xsession-errors. Right now, unfortunately, this is
far from being true :)
Federico
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]