External C function and duplicate symbol

2008-10-03 Thread Christian Giordano
Hi guys, I've few functions that I'm keeping on an external .h file.
If the header is included in more than a class I get duplicate symbol
error. I tried using #ifndef which I use on my C++ classes but didn't
bring any luck. I had a look to the various headers in the framework
and I saw they use the following sintax:

#define VEC_ZERO_2(a)   \
{   \
   (a)[0] = (a)[1] = 0.0;   \
}

Isn't there a way to achieve the same but having parameters and returns typed?


Thanks, chr
___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]


Re: External C function and duplicate symbol

2008-10-03 Thread Scott Andrew
What about using #pragma once at the top of the header file? The other  
solution is to move the functions to a C file and move just the  
function definitions to header files. I prefer the second for  
readability. I usually have a utils.c and a utils.h. I'm not a big fan  
of function implementations in header files.


Scott

On Oct 3, 2008, at 4:19 AM, Christian Giordano wrote:


Hi guys, I've few functions that I'm keeping on an external .h file.
If the header is included in more than a class I get duplicate symbol
error. I tried using #ifndef which I use on my C++ classes but didn't
bring any luck. I had a look to the various headers in the framework
and I saw they use the following sintax:

#define VEC_ZERO_2(a)   \
{   \
  (a)[0] = (a)[1] = 0.0;\
}

Isn't there a way to achieve the same but having parameters and  
returns typed?



Thanks, chr
___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/scottandrew%40roadrunner.com

This email sent to [EMAIL PROTECTED]


___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]


Re: External C function and duplicate symbol

2008-10-03 Thread Brian Stern
It seems that what you want is an inline C function.  I don't think  
this is part of the C language standard but gcc seems to have its own  
method of doing this.  Just do a find on 'inline' in the Frameworks to  
see how it's done.   Look at CGBase.h for instance.



On Oct 3, 2008, at 8:32 AM, Scott Andrew wrote:

What about using #pragma once at the top of the header file? The  
other solution is to move the functions to a C file and move just  
the function definitions to header files. I prefer the second for  
readability. I usually have a utils.c and a utils.h. I'm not a big  
fan of function implementations in header files.


Scott

On Oct 3, 2008, at 4:19 AM, Christian Giordano wrote:


Hi guys, I've few functions that I'm keeping on an external .h file.
If the header is included in more than a class I get duplicate symbol
error. I tried using #ifndef which I use on my C++ classes but didn't
bring any luck. I had a look to the various headers in the framework
and I saw they use the following sintax:

#define VEC_ZERO_2(a)   \
{   \
 (a)[0] = (a)[1] = 0.0; \
}

Isn't there a way to achieve the same but having parameters and  
returns typed?



___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]


Re: External C function and duplicate symbol

2008-10-03 Thread Patrick Mau

Hi Christian

If you really want a function to appear in multiple object files
you could declare them static, like in:

static void vec_zero2(int *vect)
{
vec[0] = vec[1] = 0;
}

This is sometimes useful if you want to inline small functions
and not use preprocessor macros like this:

static inline char *code_long(char *dst, u_int32_t in)
{
dst[0] = (in  24)  0xff; // '' for readability only
dst[1] = (in  16)  0xff;
dst[2] = (in   8)  0xff;
dst[3] = (in   0)  0xff; // '' for readability only

return dst;
}

This works also mixing C and Obj-C:

static void callSomething(id myObject, int x, y)
{
[myObject withX:x andY:y];
	[myObject setTitle:[NSString stringWithFormat:@Position: %d,%d, x,  
y]];

}

Of course this will increase your code size if you are not considering
the size of your static functions. 'otool' or the assembler listing  
within

XCode is useful to look at the generated code.

Everything else should be declared 'extern' and implemented in one
source file only. That's only my opinion, of course.

Regards,
Patrick

On 03.10.2008, at 13:19, Christian Giordano wrote:


Hi guys, I've few functions that I'm keeping on an external .h file.
If the header is included in more than a class I get duplicate symbol
error. I tried using #ifndef which I use on my C++ classes but didn't
bring any luck. I had a look to the various headers in the framework
and I saw they use the following sintax:

#define VEC_ZERO_2(a)   \
{   \
  (a)[0] = (a)[1] = 0.0;\
}

Isn't there a way to achieve the same but having parameters and  
returns typed?



Thanks, chr


___

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]