|
the maximum size of a statically allocated array in a function is limited by the size of the program's stack. the maximum size of an array allocated outside of a function is probably limited at run-time by the system (ie. how much memory is available).
-c
When history comes, it always takes you by surprise.
|
|
|
|
|
Hi, all!
Here's a plain old C++ program that you have to modify such that it prints "Hello, world!" before it prints "Bye, world!" :
<br />
<br />
#include <iostream.h><br />
<br />
int main()<br />
{<br />
cout<<"Bye, world!";<br />
return 0;<br />
}<br />
<br />
But here's the catch: You should NOT modify main() - in fact, you should'nt do anything to main() at all, but apart from that, you can do anything.
In fact, I already know of TWO ways to do this (of which one works everywhere and one works on Turbo C++ but not on VC++), and I just want to find out if there are any more.
Right now, it's 11 AM IST (5:30 AM GMT). I'll be back around 4:00 PM IST (10:30 AM GMT) for the answers.
Happy brain-racking!
Vikram.
"Do not give redundant error messages again and again." - A classmate of mine, while giving a class talk on error detection in compiler design.
|
|
|
|
|
This is not a standard C++ program, it uses iostream.h instead of iostream.
Surely if you create a class which prints hello world in it's constructor and create a global instance of it you'll get the desired result ?
Christian
NO MATTER HOW MUCH BIG IS THE WORD SIZE ,THE DATA MUCT BE TRANSPORTED INTO THE CPU. - Vinod Sharma
Anonymous wrote:
OK. I read a c++ book. Or...a bit of it anyway. I'm sick of that evil looking console window.
I think you are a good candidate for Visual Basic. - Nemanja Trifunovic
|
|
|
|
|
Christian Graus wrote:
This is not a standard C++ program, it uses iostream.h instead of iostream.
Yeah, you've got a point. But that's not the point.
Christian Graus wrote:
Surely if you create a class which prints hello world in it's constructor and create a global instance of it you'll get the desired result ?
That's right. That's one way of doing it- the portable way.
The "other" way is doing it in Turbo C++ , like this:
<br />
<br />
#include <iostream.h><br />
<br />
void Hello()<br />
{<br />
cout<<"Hello, world!";<br />
}<br />
#pragma startup Hello<br />
<br />
int main()<br />
{<br />
cout<<"Bye, world!";<br />
return 0;<br />
}<br />
<br />
It does'nt work with the Win32 compiler (the pragma is implementation-dependant).
BTW, what happened to poor Vinod's article? Did it get chucked out? Poor guy!
I woulda loved to see his next article on RAM or something- his articles make funny reading. The humor content is way high.
"Do not give redundant error messages again and again." - A classmate of mine, while giving a class talk on error detection in compiler design.
|
|
|
|
|
Vikram Punathambekar wrote:
Yeah, you've got a point. But that's not the point.
I know, but I'm pedantic.
Vikram Punathambekar wrote:
BTW, what happened to poor Vinod's article?
It was removed and he was advised to modify and resubmit if he wanted to. I don't think he did.
I like the operator << solution better. iostreams rock. I dunno why I didn't think of it, because I play with them quite a bit. And when I said 'doesn't this work', it's because I didn't try it, and I too wasn't sure if iostreams were up and running prior to main(). I guess they are, but if the standard says they must be is another thing.
Christian
NO MATTER HOW MUCH BIG IS THE WORD SIZE ,THE DATA MUCT BE TRANSPORTED INTO THE CPU. - Vinod Sharma
Anonymous wrote:
OK. I read a c++ book. Or...a bit of it anyway. I'm sick of that evil looking console window.
I think you are a good candidate for Visual Basic. - Nemanja Trifunovic
|
|
|
|
|
Christian Graus wrote:
I know, but I'm pedantic.
So am I. I've got an eye for detail.
The << overload is definitely more "elegant", but you're indirectly modifying what is inside main() . So is the guy who used a #define on cout (see replies to this thread). That's something a purist (and pedants like you and me) would frown upon. The cleanest solution (IMHO) is the global constructor. Anyway, I like the << overload best (though I'm a purist).
Poor Vinod. All he wanted was to make us laugh.
Any other solutions for the original question, do let me know at binarybandit@operamail.com .
"Do not give redundant error messages again and again." - A classmate of mine, while giving a class talk on error detection in compiler design.
|
|
|
|
|
Vikram Punathambekar wrote:
So is the guy who used a #define on cout
*grin* Well, that would work, but it would leave me feeling rather dirty....
Vikram Punathambekar wrote:
The cleanest solution (IMHO) is the global constructor.
Oh, absolutely. And the only one that does not modify main().
Vikram Punathambekar wrote:
Anyway, I like the << overload best (though I'm a purist).
Yes, I like it too.
Christian
NO MATTER HOW MUCH BIG IS THE WORD SIZE ,THE DATA MUCT BE TRANSPORTED INTO THE CPU. - Vinod Sharma
Anonymous wrote:
OK. I read a c++ book. Or...a bit of it anyway. I'm sick of that evil looking console window.
I think you are a good candidate for Visual Basic. - Nemanja Trifunovic
|
|
|
|
|
Declare a new << operator
ostream& operator << (ostream& os, char* str)
{
const char* temp = "Hello World!\n";
return os << temp << (const char*)str;
} this works because ostream has a <<(const char*) operator, but not a <<(char*) operator.
Sonork 100.11743 Chicken Little
"You're obviously a superstar." - Christian Graus about me - 12 Feb '03
Within you lies the power for good - Use it!
|
|
|
|
|
That makes it three. I never thought of doing it like this. One way I knew was what Christian said- use a constructor for a global object. The other is non-portable, and you can find it in my reply to Christian's post.
I guess I'm grateful (!) to you for this.
Vikram.
"Do not give redundant error messages again and again." - A classmate of mine, while giving a class talk on error detection in compiler design.
|
|
|
|
|
This is the best one. Personally I don't like the others because you might be making assumptions about initialization orders and such. Does the standard specify that iostream has been fully initialialized prior to main being invoked? Probably, but I am not sure.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
Tim Smith wrote:
This is the best one.
This? What do you mean by this? The constructor or the operator overloading? The latter is more elegant, but the first one comes more readily to mind.
There's been another reply- somebody used a #define on cout itself (!).Check it out.
Regards,
Vikram.
"Do not give redundant error messages again and again." - A classmate of mine, while giving a class talk on error detection in compiler design.
|
|
|
|
|
How about getting the preprocessor to do it for you?
#define cout cout << "Hello, world"; cout
I also came up withe the operator<< override myself, although I was a bit too unfamiliar to write it.
Roger Allen
Sonork 100.10016
Were you different as a kid? Did you ever say "Ooohhh, shiny red" even once? - Paul Watson 11-February-2003
|
|
|
|
|
WOW!
I never woulda thought of that! Err... maybe I would, given some time. Anyway, full credits to you!
No offense meant, but if you see closely, I don't want anything inside main() to be changed. Your solution and the << overload solution indirectly do that. They change the behavior of what is inside main() from outside. A purist wouldn't like it. The "cleanest" is the global constructor solution, while the dirtiest is the pragma (see my earlier post for code).
Nice work!
Regards,
Vikram.
"Do not give redundant error messages again and again." - A classmate of mine, while giving a class talk on error detection in compiler design.
|
|
|
|
|
How can I handle directories with space when passed into ParseCommandLine. It seems to treat them as paramaters. Any ideas?
ie c:\documents and files\
Thanks
|
|
|
|
|
Surround them with double quotes when passing them in.
e.g. "c:\documents and files\"
Dave
|
|
|
|
|
|
I tried adding a static variable inside a class. ie static CButton m_button and I get a linker error. Any ideas.
Thanks
|
|
|
|
|
If you add a variable as a static it is declared, but not defined. You need this:
class a
{
static int i;
}
int a::i = 0;
Christian
NO MATTER HOW MUCH BIG IS THE WORD SIZE ,THE DATA MUCT BE TRANSPORTED INTO THE CPU. - Vinod Sharma
Anonymous wrote:
OK. I read a c++ book. Or...a bit of it anyway. I'm sick of that evil looking console window.
I think you are a good candidate for Visual Basic. - Nemanja Trifunovic
|
|
|
|
|
Hello,
I am having trouble with FindResource() when trying to find a resource of custom type.
This code returns null:
<br />
HRSRC hResource = ::FindResource(hInst, "IDR_MYNAME", "MYTYPE");<br />
I also tried FindResourceEx with my language locale, but all the same.
Any ideas as to what I am doing wrong?
|
|
|
|
|
I presume that IDR_MYNAME is your resource ID - in which case you want:
HRSRC hResource = ::FindResource( hInst, MAKEINTRESOURCE(IDR_MYNAME), "MYTYPE" );
Dave
|
|
|
|
|
Yes, I am sorry about that , this is what I've been using.
It doesn't work.
While this works:
<br />
HRSRC hResource = ::FindResource( hInst, MAKEINTRESOURCE(IDB_MYBITMAP), RT_BITMAP); <br />
|
|
|
|
|
Maybe your resource is not in the instance handle passed.
Maybe your resource 'type' did not get stored as "MYTYPE".
Open the DLL or EXE with Visual Studio in 'as resource' mode to see if the resource is really in there.
You might check the value of GetLastError, it usually helps track it down the problem.
C++/MFC/InstallShield since 1993
|
|
|
|
|
hi there, i'm new to this place and Visual C++, so bear with me if i don't ask this clearly....
basically...
i have an SDI based on the form type (so effectively it's a dialog with saving).
I have a tree structure forming, where each node will represent a different version of a file. What i want to do is drag a file, or open a dialog or whatever and add the details to this tree.
I think i know how to store the details, serializing classes and things, it's just getting the information for the file. Preferably i would want to copy the file to it's own subdirectory too...
so to summarise I'd like the following but am unsure on file handling.
NOTE: I'm not talking the file handling as in saving the SDI... i mean dragging a file into the dialog.
The tree would look something like this:
test.txt-
|-Version 1.0
|-Version 1.1
|-Version 1.2
The node would point to an object which needs to contain the file location and other attributes.
For simpleness the file location would be a subdirectory called "version 1.x" from where the SDI document is located...
Hope i'm not asking too much
Just a few pointers on this kind of file handling would be great - i'm not neccaserily asking for a complete solution
Thanks very Much
Colin Davidson
|
|
|
|
|
One solution is CFile. Another solution is CStdioFile.
Kuphryn
|
|
|
|
|
I need to update the resource in an exe file under Windows 98 when my program is running. Under Windows 2000/XP, I can use BeginUpdateResource, UpdateResource and EndUpdateResource. But I am dejected that these functions don't exist under Windows 98. What can I do? Please help.
stanley
|
|
|
|