Is main() a callback function?
-
I can't make up my mind.
Regards, Rob Philpott.
-
I can't make up my mind.
Regards, Rob Philpott.
-
I can't make up my mind.
Regards, Rob Philpott.
I was just reading this yesterday[^]
Quote:
All C++ programs must have a main function. If you try to compile a C++ .exe project without a main function, the compiler will raise an error. (Dynamic-link libraries and static libraries don't have a main function.) The main function is where your source code begins execution, but before a program enters the main function, all static class members without explicit initializers are set to zero. In Microsoft C++, global static objects are also initialized before entry to main. Several restrictions apply to the main function that do not apply to any other C++ functions. The main function: * Cannot be overloaded (see Function Overloading). * Cannot be declared as inline. * Cannot be declared as static. * Cannot have its address taken. * Cannot be called.
But, maybe you are thinking it is a callback from the OS? Or maybe you're just asking a rhetorical question? :)
-
I was just reading this yesterday[^]
Quote:
All C++ programs must have a main function. If you try to compile a C++ .exe project without a main function, the compiler will raise an error. (Dynamic-link libraries and static libraries don't have a main function.) The main function is where your source code begins execution, but before a program enters the main function, all static class members without explicit initializers are set to zero. In Microsoft C++, global static objects are also initialized before entry to main. Several restrictions apply to the main function that do not apply to any other C++ functions. The main function: * Cannot be overloaded (see Function Overloading). * Cannot be declared as inline. * Cannot be declared as static. * Cannot have its address taken. * Cannot be called.
But, maybe you are thinking it is a callback from the OS? Or maybe you're just asking a rhetorical question? :)
Just pondering it really. Yes, I meant in effect it was called from the OS. Must admit I didn't know you couldn't call main() yourself - obviously never tried. Or quite possibly forgotten. Then I started wondering what a callback function actually is (despite using them for years and years and years). It's just a function, and it's the way it's called that makes it a callback in a sense. And that made me think of indirect addressing rather than direct addressing at the low level. But then, are virtual functions callbacks? Not really but they are called indirectly... I think it's time to go home. :)
Regards, Rob Philpott.
-
I can't make up my mind.
Regards, Rob Philpott.
-
I can't make up my mind.
Regards, Rob Philpott.
Probably not:
Callback (computer programming) - Wikipedia[^]
a callback, also known as a "call-after"[1] function, is any executable code that is passed as an argument to other code that is expected to call back (execute) the argument at a given time.
So to be a callback function it would need to be passed as an argument to some other function, and I can't see any good reason to do that when you can call it directly or via a function pointer / function table that is set by the compiler / linker. That you can't call
main
at all except from a single point in your app kinda backs that up as well!"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony AntiTwitter: @DalekDave is now a follower!
-
No, it is just a function that gets called by the run-time library, framework etc. I have a feeling (vague memory) that you can tell the linker to use some other function as the starting point, but don't know why you would want to.
Richard MacCutchan wrote:
don't know why you would want to
To annoy the next poor developer that has to work on your satan-spawned code ... :laugh:
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony AntiTwitter: @DalekDave is now a follower!
-
Yes, it is, and it's not re-entrant.
"They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"
Interesting, I didn't know/have forgotten about the re-entrancy. Seems you can do it in C#, but that's with a capital 'M'ain, and is a language for wimps.
Regards, Rob Philpott.
-
Probably not:
Callback (computer programming) - Wikipedia[^]
a callback, also known as a "call-after"[1] function, is any executable code that is passed as an argument to other code that is expected to call back (execute) the argument at a given time.
So to be a callback function it would need to be passed as an argument to some other function, and I can't see any good reason to do that when you can call it directly or via a function pointer / function table that is set by the compiler / linker. That you can't call
main
at all except from a single point in your app kinda backs that up as well!"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony AntiTwitter: @DalekDave is now a follower!
Yes, but I kind of expect the OS to call my method at the given time of the process starting up...? And the address is passed to the OS to be called back on, just through an extra layer of module EXPORTS etc. It's a pedant's dream this. I should move on.
Regards, Rob Philpott.
-
Interesting, I didn't know/have forgotten about the re-entrancy. Seems you can do it in C#, but that's with a capital 'M'ain, and is a language for wimps.
Regards, Rob Philpott.
-
I can't make up my mind.
Regards, Rob Philpott.
-
Interesting, I didn't know/have forgotten about the re-entrancy. Seems you can do it in C#, but that's with a capital 'M'ain, and is a language for wimps.
Regards, Rob Philpott.
The non-re-entrancy part comes about because you can't call it yourself. It's not a callback in the strict sense of the term but in effect it is if you think of it as the designated function for the OS to call to run the program. It is not specified in code (this is why it fails the strict definition) but it is implicitly known to the linker and can be overridden. In the case of programs for Windows, it IS overridden to be WinMain.
"They have a consciousness, they have a life, they have a soul! Damn you! Let the rabbits wear glasses! Save our brothers! Can I get an amen?"
-
Yes, but I kind of expect the OS to call my method at the given time of the process starting up...? And the address is passed to the OS to be called back on, just through an extra layer of module EXPORTS etc. It's a pedant's dream this. I should move on.
Regards, Rob Philpott.
The OS doesn't call your
main
method at all - there are three places it can start: the MZ Stub (which for Windows apps will just print "this program cannot be run in MSDOS mode" and quit the app), the NE or (for more modern apps) the PE: Portable Executable - Wikipedia[^]. And EXE files (even old MSDOS 16 bit apps) don't callmain
immediately anyway, they do allocation and static initialisation before they are ready to start running the code you wrote!"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony AntiTwitter: @DalekDave is now a follower!
-
Well it never called me back - and I thought we had such a connection... :(( :(( :mad: :(( :((
I, for one, like Roman Numerals.
It called me back once, but it was drunk at the time.
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony AntiTwitter: @DalekDave is now a follower!
-
Interesting, I didn't know/have forgotten about the re-entrancy. Seems you can do it in C#, but that's with a capital 'M'ain, and is a language for wimps.
Regards, Rob Philpott.
Rob Philpott wrote:
C# ... is a language for wimps
To quote my elderly cat, "Fight me, bitch."
Software Zen:
delete this;
-
I can't make up my mind.
Regards, Rob Philpott.
It probably depends on the language, compiler, system, etc. As far as I know, in the languages I use, there nothing special about call-back functions, it's only about how an ordinary function is used. There's no reason to declare that no language will ever allow it. I seem to recall having a desire for a recursive main. : ) Just because.
-
Rob Philpott wrote:
C# ... is a language for wimps
To quote my elderly cat, "Fight me, bitch."
Software Zen:
delete this;
It's how I express my intent daily to my ungrateful computer - I'm hooked, but its still the kid's soft play of computer languages. :-D
Regards, Rob Philpott.
-
I can't make up my mind.
Regards, Rob Philpott.
How dare you ask programming questions in the lounge?!! I'm outraged. :mad:
Social Media - A platform that makes it easier for the crazies to find each other. Everyone is born right handed. Only the strongest overcome it. Fight for left-handed rights and hand equality.
-
How dare you ask programming questions in the lounge?!! I'm outraged. :mad:
Social Media - A platform that makes it easier for the crazies to find each other. Everyone is born right handed. Only the strongest overcome it. Fight for left-handed rights and hand equality.
Yeah, it's good to be reckless sometimes. Send me the codez and I'll go away. :)
Regards, Rob Philpott.
-
The OS doesn't call your
main
method at all - there are three places it can start: the MZ Stub (which for Windows apps will just print "this program cannot be run in MSDOS mode" and quit the app), the NE or (for more modern apps) the PE: Portable Executable - Wikipedia[^]. And EXE files (even old MSDOS 16 bit apps) don't callmain
immediately anyway, they do allocation and static initialisation before they are ready to start running the code you wrote!"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony AntiTwitter: @DalekDave is now a follower!
That reminds me of a thing I read some time back, titled something along the lines of 'the 50 things Windows does before hitting main()'. Can't find it but it's out there somewhere, by one of the SysInternals lot I think. It was both interesting and really boring at the same time.
Regards, Rob Philpott.