Re: gcc poison, how to catch use of strcpy()?
Re: gcc poison, how to catch use of strcpy()?
- Subject: Re: gcc poison, how to catch use of strcpy()?
- From: John Cebasek <email@hidden>
- Date: Wed, 20 May 2009 08:09:21 -0400
Hi Guys:
This has caught my eye. If we were to take the "MyDeprecations.h"
route, where's the best place to put the header file that contains the
deprecations so that it survives across Xcode updates and requires
minimum changes to new and existing projects?
John
On 19-May-09, at 2:16 PM, Gwynne Raskind wrote:
On May 19, 2009, at 1:04 PM, Sean McBride wrote:
Ever wished Apple would deprecate things so that you'd be warned
against using them?
/*
* only certain compilers support __attribute__((deprecated))
*/
#if defined(__GNUC__) && ((__GNUC__ >= 4) || ((__GNUC__ == 3) &&
(__GNUC_MINOR__ >= 1)))
#define DEPRECATED_ATTRIBUTE __attribute__((deprecated))
#else
#define DEPRECATED_ATTRIBUTE
#endif
/*
* AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED
*
* Used on functions introduced in Mac OS X 10.0,
* and deprecated in Mac OS X 10.0
*/
#define AVAILABLE_MAC_OS_X_VERSION_10_0_AND_LATER_BUT_DEPRECATED
DEPRECATED_ATTRIBUTE
Is your suggestion to hack the system headers to add the deprecated
decoration? I guess that would work.
It would work, but it's *very* ugly, and would have to be repeated
across every platform and SDK (Mac OS X: 10.3.9, 10.4, 10.5. iPhone:
2.0, 2.1, 2.2, 2.21.) - and don't copy stdio.h between them because
it might be different.
Here's a better solution: Take all the identifiers you want to
deprecate. Copy their delcarations *verbatim* out of the header in
which they're defined. Create a new header file that duplicates
those declarations, adding the DEPRECATED_ATTRIBUTE to them. Include
that file in the prefix for your project (AFTER all the other
includes!). For example, to deprecate strcpy() and sprintf(), you
would have a header "MyDeprecations.h" (or whatever) containing
these declarations:
// Original declarations taken from stdio.h and string.h in
MacOSX10.5.sdk and iPhoneOS2.2.1.sdk
char *strcpy(char *, const char *) DEPRECATED_ATTRIBUTE;
int sprintf(char * __restrict, const char * __restrict, ...)
__DARWIN_LDBL_COMPAT(sprintf) DEPRECATED_ATTRIBUTE;
System headers tend to change very little between SDKs at the BSD
level, even between MacOS and iPhoneOS, so you shouldn't run into
many (if any) conflicts in definitions if you use the header with
multiple SDKs.
-- Gwynne, Daughter of the Code
"This whole world is an asylum for the incurable."
-- Gwynne, Daughter of the Code
"This whole world is an asylum for the incurable."
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden