The static
keyword serves the same purposes in C and C++.
-
When used at file level (outside of a function), it sets the visibility of the item it’s applied to. Static items are not visible outside of their compilation unit (e.g., to the linker). Their duration is the same as the duration of the program.
These file-level items (functions and data) should be static unless there’s a specific need to access them from outside (and there’s almost never a need to give direct access to data since that breaks the central tenet of encapsulation).
If (as your comment to the question indicates) this is the only use of
static
you’re concerned with then, no, there is no difference between C and C++. -
When used within a function, it sets the duration of the item. Again, the duration is the same as the program and the item continues to exist between invocations of that function.
It does not affect the visibility of that item since it’s visible only within the function. An example is a random number generator that needs to keep its seed value between invocations but doesn’t want that value visible to other functions.
-
C++ has one more use,
static
within a class. When used there, it becomes a single class variable that’s common across all objects of that class. One classic example is to store the number of objects that have been instantiated for a given class.
As others have pointed out, the use of file-level static has been deprecated in favour of unnamed namespaces. However, I believe it’ll be a cold day in a certain warm place before it’s actually removed from the language – there’s just too much code using it at the moment. And ISO C have only just gotten around to removing gets()
despite the amount of time we’ve all known it was a dangerous function.
And even though it’s deprecated, that doesn’t change its semantics now.