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.

Hi, Oliver

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

Reply via email to