We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Here comes a very special wish - please do not call me crazy:
Working with many C modules, I prefer to define protected/"dangerous" variables static to one module. Quite often I would like to have a variable global only in a restricted number of modules - typically only in one module and then further the the communication modules (e. g. "comm1.c", "comm2.c").
To achieve this, it would be terrifically nice, if I could create the following code with a special pragma modifier (I made the examples with two modules "comm1.c" and "comm2.c", to keep the examples more general - but in fact I would be perfectly happy, if this would work with restriction to one further module "comm.c"):
#pragma RestrictedGlobal "comm1.c" #pragma RestrictedGlobal "comm2.c" int iRestricted;
(alternatively also like this (but then it would not work in other C compilers):
#pragma allowAccess "comm1.c" #pragma allowAccess "comm2.c" static int iRestricted;
)
In "comm1.c", "comm2.c" then the extern command
extern int iRestricted;
should be allowed - but it any other module it should fail (best would be, if the command itself would be allowed, but if the access to iRestricted would fail in any other module - then it is possible to include the extern declaration in some header file without the danger of failure)
I know that this is not possible in any other C compiler, but I think pragma is not standardized, so C compiler producers can add their own - just I think better use the first of the above alternatives, as then the code will also work in other C compilers not recognizing this pragma.
... I know that this might be quite an effort, as it concerns the very interior of the compiling/linking tables ... so just a polite question ... .
What you have to realize is that the operator "new" isn't the only way to get object variables in C++.
That's what I meant with my statement "I would presumably use C++ in a sort of quasi-static approach".
If I skip new, then usually I would define all my classes global. And in this case of course it will not make much sense to use constructor / destructor functions. So the main advantage of using C++ then will restrict to the variable protection scheme of C++, which of course is very advanced.
... perhaps in some future I will try some small steps with some simple global C++ classes without constructor / destructor ...
Constructors/destructors aren't bound to the use of "new" and "delete".
They apply just as well to global objects, or objects created on the stack.
You want to make classes complete - and that would include the use of constructors/destructors. Of course, some classes don't define anything that need destruction in which case you can get by with an empty default destructor.
But just as global C variables are always zeroed, you want all C++ objects (however they are created) to have a known state of all member attributes. Unless you think it's fun to debug programs having uninitialized variables taking random values depending on what was in memory before.