On 04/21/2010 11:58 AM, Oliver Bandel wrote:
> Zitat von "Tor Lillqvist"<t...@iki.fi>:
>>> The test
>>> if( template )
>>> makes only sense, if you can be sure that uninitialzed values
>>> will definitelky be NULL.
>> You must have missed the g_return_val_if_fail (! template ||
>> GIMP_IS_CONTEXT (template), NULL) .
>> It checks if template is NULL or a pointer to a valid GimpContext. If
>> template is some random non-NULL value, the test will fail and a
>> warning message will be printed. Such warning messages indicate a
>> programmer error and should be dealt with during development.
> Nice to know, but I was talking on things like the *context
> in that funcion.
> Even only temporarily valies, if set to a certain value,
> like 0 or NULL, will help in finding problems.
> The mentioned function just was an example.
> Uninitialzed values I see nearly everywhere in the code.
> Dereferencing NULL is easy to find, because it crashes early.
Have you programmed with glib before? A lot of defensive programming
techniques differ between straight C and C-with-glib. For instance, the
guards at the top are common, and (I imagine)
gimp_context_copy_properties has similar guards. As such, it's the job
of the called function, not the caller, to check if a pointer they want
to dereference is NULL.
This has the advantage that you don't check a pointer for NULL 10 times
across 10 different function calls when you only use it once, all the
way at the bottom. Of course, if you actually dereference a value (like
the template pointer in the snippet you posted), you should test it
before you dereference it.
In short, you might want to see what sort of defensive techniques are
customary or appropriate for a given context before concluding that
we're programming blind.
Gimp-developer mailing list