| |||
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] |
Another round? John Weeks wrote:
Rush:
Thanks for considering my problem.
John Weeks wrote:
Hi, folks.
I have a C++ source file that defines a global variable:
extern "C" unsigned char gSuppressLiveUpdate = 0;
so that it can be used from a C source file. In the C file, of course, I have
extern unsigned char gSuppressLiveUpdate;
gcc complains (OK, it's just a warning):
warning: 'gSuppressLiveUpdate' initialized and declared 'extern'
I guess I see the point of the warning; it's not really extern because it is being defined right there. But then, how do I prevent name mangling so that it can be used in the C file, without using the "extern" keyword?
At the moment I have suppressed the warning by defining and initializing it in the C file and using just extern "C" unsigned char gSuppressLiveUpdate; in the C++ file. But that's not satisfying; I want to be able to put the definition where I want it.
CodeWarrior and VC++.net are both OK with this, but I realize that gcc is actually more standards-compliant that they are. I tried searching for an answer with Google, but all the discussions are about functions declared extern "C".
It would be "more standard" to move the declaration to the corresponding header file, i.e. extern "C" unsigned char gSuppressLiveUpdate;
and keep the definition in the C++ file, i.e. unsigned char gSuppressLiveUpdate = 0;
This should take away the warning, and shouldn't have any effect on the C file, since it's doing its own declaration. (But it should read a header that contains this declaration. Really it should read the same header as the C++ file. Might require some #ifdef hanky panky, or just a globals.h file that's included both places.)
- Rush
I agree that the use of header files here is not up to snuff wrt usual practice.
What you are saying is essentially the same as (except for re-organizing the header files):
extern "C" unsigned char gSuppressLiveUpdate; unsigned char gSuppressLiveUpdate = 0;
and, in fact, that fixes the problem. Looks odd, though.
I guess the confusion comes from the fact that C++ is using "extern" to mean something slightly different from what C means. But it's only different when it is extern "C"; C++ uses extern just like C otherwise!
Hi John,
However, doing this in a C++ file: extern "C" unsigned char gSuppressLiveUpdate; unsigned char gSuppressLiveUpdate = 0;
Likewise, extern "C" unsigned char gSuppressLiveUpdate = 0;
Regards, Rush _______________________________________________ Do not post admin requests to the list. They will be ignored. Xcode-users mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/xcode-users/email@hidden
| References: | |
| >extern "C" and global variables (From: John Weeks <email@hidden>) | |
| >Re: extern "C" and global variables (From: Rush Manbert <email@hidden>) | |
| >Re: extern "C" and global variables (From: John Weeks <email@hidden>) |
| Home | Archives | FAQ | Terms/Conditions | Contact | RSS | Lists | About |
Visit the Apple Store online or at retail locations.
1-800-MY-APPLE
Contact Apple | Terms of Use | Privacy Policy
Copyright © 2007 Apple Inc. All rights reserved.