c++

Chad Leigh -- Shire.Net LLC chad at shire.net
Sat Feb 19 23:16:39 GMT 2005


On Feb 19, 2005, at 4:07 PM, Gert Cuykens wrote:

> On Sat, 19 Feb 2005 02:57:53 -0700, Chad Leigh -- Shire. Net LLC
> <chad at shire.net> wrote:
>>
>> On Feb 19, 2005, at 2:51 AM, Gert Cuykens wrote:
>>
>>> On Thu, 17 Feb 2005 13:17:51 +0100, Hubert Sokołowski
>>> <h.sokolowski at wsisiz.edu.pl> wrote:
>>>> On Thu, 17 Feb 2005 13:05:43 +0100
>>>> Gert Cuykens <gert.cuykens at gmail.com> wrote:
>>>>
>>>>> static void callback( GtkWidget *widget, gpointer   data ){
>>>>>     g_print ("Hello again - %s was pressed\n", (gchar *) data);
>>>>> }
>>>>>
>>>>> why do they put () around gchar ?
>>>>> why can it not be gchar *data ?
>>>>
>>>> You should learn some more about programming in C before you start
>>>> writing GTK apps.
>>>>
>>>> hs
>>>
>>> Does anybody want to explain what the () thingies are around gchar * 
>>> ?
>>>
>>
>> It is a typecast -- coercing "data" to be of type (gchar *) to the
>> compiler when matching parameter types at compiler time.
>>
>> Chad
>>
>
> lol :) I wish you could see the expression on my face while reading it 
> :)
>
> Why can i not do this ?
>
> g_print ("Hello again - %s was pressed\n", gchar *data);
> or this
> gchar *data;
> g_print ("Hello again - %s was pressed\n", *data);
> or this
> gchar *data;
> g_print ("Hello again - %s was pressed\n", data);
>
> What does coercing mean ?
> Why does the compiler have to match parameters ?

I'll let you look up the answers above in C reference manuals (and C++ 
ones for by reference parameters). However, the answer to "Why" is best 
known to Kernighan and Ritchie <http://cm.bell-labs.com/cm/cs/cbook/>

C is (now) a strongly typed language and this type checking is done at 
compile time in order to try and help you reduce errors.

>
> PS what is the difference between ?

Assuming the following declaration

gpointer	data;

data is a pointer to some kind of structure

>  A=*data

this is the data itself, ie, the pointer is dereferenced

>  A=data

this is the pointer to the data

>  A=&data

this is a kind of double indirection -- this is a reference to the 
pointer to the data.  I believe this sort of notation for a reference 
first came from Bjarne Stroustrop or however he spells it -- the 
"father" of C++

I am not a C nor C++ expert.  I long ago stopped doing C++ and my C is 
mostly confined to Objective-C now-a-days.  Best to get the latest K&R 
C book and a good C++ book to answer your questions.

best
Chad



More information about the freebsd-questions mailing list