|
No. The reason for extern is to differentiate between a declaration and a definition:
int num; // Is this a definition or a declaration?
In this case the compiler assumes it’s a definition. If you want to share num between two compilation units this will not do the trick and will result in a linker error – there will be two variables with the same name.
extern int num; // This is a declaration.
Now this referrers to a “num” defined elsewhere.
Steve
|
|
|
|
|
Thanks Steve,
In the sample, even if you do not use why we need to write statement, extern int i? i is global and we can use it anywhere in the same compile unit (cpp file).
regards,
George
|
|
|
|
|
As I said, extern is used to indicate that a construct is a declaration and not a definition. With functions no such mechanism is needed: if the function has a body it’s a definition and if not it’s a declaration:
int void FooBar();
int void FooBar()
{
}
If you want to use the “FooBar” function in another compilation unit (from where it’s defined) you need to make sure to include its declaration. This is usually done by including a header file. It’s an error to define the same function twice in two separate compilation units however and attempting to do so will result in a link error.
Since variables don’t have bodies this technique isn’t usable, thus the extern keyword:
int FooBar;
extern int FooBar;
Steve
|
|
|
|
|
Thanks Steve,
How about this,
extern int i = 100;
a definition or declaration, why?
regards,
George
|
|
|
|
|
From section 3.1.2 of the C++ standard:
“A declaration is a definition unless it declares a function without specifying the function’s body (8.4), it contains the extern specifier (7.1.1) or a linkage-specification (7.5) and neither an initializer nor a function-body, it declares a static data member in a class declaration (9.4), it is a class name declaration (9.1), or it is a typedef declaration (7.1.3), a using-declaration (7.3.3), or a using-directive (7.3.4).”
Steve
|
|
|
|
|
Thanks Steve,
1.
So, extern int i = 100;
should be declaration and matches the rule, " it contains the extern specifier (7.1.1)", right?
2.
What is " linkage-specification (7.5)"?
regards,
George
|
|
|
|
|
George_George wrote: 1.
So, extern int i = 100;
should be declaration and matches the rule, " it contains the extern specifier (7.1.1)", right?
No, because of the "and neither an initializer nor a function-body" clause; the example you gave does have an initializer.
extern int i;
extern int i = 100;
George_George wrote: 2.
What is " linkage-specification (7.5)"?
extern "C" is an example.
Steve
|
|
|
|
|
Thanks Stephen,
Any special advantage/restrictions/functions we could have when writing extern int i = 3 other than int i = 3?
(I think you mean extern int i = 3 has the same meaning as int i = 3, which is definition with initialization. right?)
regards,
George
|
|
|
|
|
There is no reason to do so (use extern ) in such cases. Doing so does neither harm nor good; the two constructs are equivalent. I wouldn’t in cases like that however as it could lead to confusion.
Steve
|
|
|
|
|
Thanks Steve,
My question is answered.
regards,
George
|
|
|
|
|
I think this[^] article is helpful for you.
|
|
|
|
|
Thanks Hamid,
But it does not cover the case when using extern to qualify a variable which is defined in the same compile unit.
regards,
George
|
|
|
|
|
Doing so is poinless and possibly misleading, but harmless.
Steve
|
|
|
|
|
How do I disable a toolbar button?
Also I'd like to know how to disable some buttons in my context menu?
Please make an example for me.
Thanks!!!
|
|
|
|
|
If you're using raw toolbars then the TB_ENABLEBUTTON is probably what you're after. If you using MFC I believe the "MFC magic" should take care of this for you.
Steve
|
|
|
|
|
Check out ON_UPDATE_COMMAND_UI() .
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I am not sure if this is the place to ask this question.
I have been working on learning C++ for about 2 years now.
A year ago i got tired of it all , so i made a comprimise and went to visual C++ 6.0 (didnt want to go to that because i wanted the most efficiancy i could get) and recently bought Visual Studio 2005. I have bought so many books and read so many of them. They all leave me with a gap. I learn how to do the simple things , but not teaching me where to go next. I can make text based console applications till the cows come home , I am very good at using most C++ features , Classes , pointers , not the best at them , but i still know enough to get by.
BUT the books , articles , programs , what ever i use never tell me how to take the next step to make "real" program that has a GUI.
I have even went to using the Windows Forms to design GUI , but have discovered even that didnt take me far enough.
None of my books have taught me how to use libraries , or antyhing like that. I was told i had to use these to get somewhere , but no idea where to go.
I want to make programs to help people , remember meds , manage health problems.
I want to make programs to plan gardens , where you have like a graph background and can drag and drop pictures of plants.
I want to make a jigsaw puzzle game.....
This stuff isnt rocket science i know , i just dont know the steps to go to learn the extra stuff so i can make windows programs GUI that i can have all of this stuff in.
Does any one have any ideas where i can go from here. Books i can read , sugestions i can take , articles to read.
I am great at making programs in PHP , because i can use the HTML as the gui.
I want this so bad , to be able to make programs , and am willing to work for it , i just need to have an idea where the path is i need to go down.
Thank you very much for reading this.
And thank you even more if you reply LOL.
Nic
|
|
|
|
|
dont give up - there's a whole host of ways to go from where you are - there's GDI, GDI+, OpenGL, glut and a host of libraries people have written for games etc that use advanced graphics
.. let google be your friend !!!
'g'
|
|
|
|
|
I've been where you are but I was lucky. Your next step is to take one step back, to C (or C style C++), and write your first Win32 GUI Hello World application, not because it's that easy but because it's the only way to really understand MS Windows GUI programming and will set you up to understand what all the easier ways, MFC, Windows Forms etc are really doing underneath. The Win32 documentation on MSDN is your friend and there are (or were) relevant samples around although I can't pin one down at the minute. The basic steps are, create an empty project that's set up as a Win32 GUI app rather than a Console app, with the VS 2005 wizard. From your WinMain function, Initialize and register a Window Class [^] (Different from a C++ class but one can sort of be the other), Create a Window [^] of that class and handle some of the messages you recieve in the Window Procedure[^] (a callback function) that you registered. Use functions from the GDI library to do text and graphical output as suggested.
Good Luck
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
dear all
when i compiled my code,the following problem occurred, anyone can give me detail containing base,i have already checked seting and directory, all it is ok. here psoCode.lib is a static library what i created, when i compiled psoCode library and mian function, all have no problem, after i dependency, the following problem occurred.
thanks a lot.
Linking...
LINK : fatal error LNK1104: cannot open file "psoCode.lib"
Error executing link.exe.
Li Zhiyuan
modified on Sunday, February 10, 2008 11:31 PM
|
|
|
|
|
The error pretty much says it all. Is the lib file present on your machine? If so is the library search path set correctly?
Steve
|
|
|
|
|
thanks, yes, i created this library with this main function,this library is static library,when i compiled both library and main function, they have no problem, but after dependency, the following problem occurred, can you provide me with detail and base setting, thanks a lot.
Linking...
LINK : fatal error LNK1104: cannot open file "psoCode.lib"
Error executing link.exe.
Li Zhiyuan
|
|
|
|
|
It sounds like you've set the dependencies incorrectly. The project that uses the library should be dependent on the library.
Steve
|
|
|
|
|
how to set dependency? before i did, it is no problem...can you give me detail? thanks
Li Zhiyuan
|
|
|
|
|
You haven't mentioned which IDE you're using.
Steve
|
|
|
|
|