Not Keil specific; one for the 'C' experts:
Why would one put 'static' variables definitions in a header?
eg, in a header file:
/* * TCO count to temperature conversion table. */ static erTcoTableStruct tcoTableOPUS1[] = { /*{TCO,Temp,} */ {1,-99}, {4,-45}, {5,-40}, {8,-35}, {11,-30}, {16,-25}, {22,-20}, {29,-15}, {37,-10}, {48,-5}, {61,0}, {78,5}, {99,10}, {124,15}, {153,20}, {188,25}, {227,30}, {270,35}, {315,40}, {365,45}, {420,50}, {481,55}, {549,60}, {625,65}, {710,70}, {805,75}, {910,80}, {1010,85}, {1060,88} };
AIUI, the whole point of so-called "header" files in 'C' is to share stuff between source files;
But the whole point of the 'static' keyword (at file scope) in 'C' is to make stuff private so that it is not visible to other modules - ie, not shared.
So I can't see why one would want to have 'static' definitions in a header?!
So you can further argue your point of view??
I think this question has been answered. The developer explained the reasons for why it was used, which is more than you can usually expect from a code snippet.
It was also estabished that this is not the most efficent way to code. But, the developer seems to be in high regard within this community and I personally have no issue with the way he wants to code something. If it is a preference, and it does not violate the responsibilities entrusted to an engineer regarding safety and reliability then it is allowed.
Would I use this approach? I believe that question has also been answered.
There is no absolutely correct way to code to solve a problem. There are only more efficient and effective ways to do it. If the coding solution is accomplished within established guidelines and is well documented so be it. The fix would be easy enough: static --> const
Finally, if it is expected that someone else will post the why to this question, knowing full well the bias of this thread regarding why you should not use this approach, given a choice, do you really expect someone to do this? Only if they like to argue a point.
As far as I'm concerned, this was nothing more than an academic exersize.
Cheers.
Are you referring to Cpt Vince?
He was not the developer of the code that I cited in my original post!
I think you've got sidetracked onto a discussion of the way he manages his header files. That wasn't my original question!
My question was, what could be the point in having static definitions in a header file (irrespective of how you manage your header files); in other words, what could be the point in having multiple identically-named and identically-typed but distinct objects in the files of a project?
"As far as I'm concerned, this was nothing more than an academic exersize."
Well, I've got code like that, and I can't see any good reason for it - so I was wondering if anyone could suggest one.
Unfortunately, the discussion got sidetracked into different ways of managing headers - which wasn't the point.
I congratulate you for your persistence!
The only halfway sensible reason I can come up with (which I think someone else already suggested) is to allow the instance of the struct local to each source file to modify its local instance at runtime. I'm sure someone, somewhere will have managed to find a reason to do this.
Regarding some of the other stuff in this thread:
For the confused: From the compiler's perspective include files don't exist, so special handling is not an option.
For the deluded: The convention in 'C' programming is that header files do not include any code that allocates storage. Everyone goes through the "oh but I've got this great way of using header files that's much better/safer/controlled than the usual way" during their learning curve. Fortunately most of them eventually realise that the conventional approach is the best one.
When you join a company or a project you adopt the existing conventions, even though those almost certainly aren't the best. Why would you join a community of (presumably) hundreds of thousands of 'C' programmers than decide not to follow convention?
I look forward to the responses...
Thanks!
"The only halfway sensible reason I can come up with (which I think someone else already suggested) is to allow the instance of the struct local to each source file to modify its local instance at runtime."
Yes - Mike Kleshov suggested it.
Anyone (else) got any other ideas?