In Rust global variables are declared with the static keyword. In C there is a difference between static variables (with translation unit scope) and non-static global variables (with truly global scope). Is it useful and possible to make this same distinction in Rust? If not, why not, and if so, how?

2

1 Answer

Static variables have the same scoping rules as other things in a file. If you want it to be accessible from anywhere, you can make it pub, otherwise it will be private:

// accessible from inside the crate static A: f32 = 3.141; mod secret { // accessible from inside this module static B: u8 = 42; } mod not_secret { // accessible from inside the crate pub static C: u8 = 69; } pub mod public { // accessible from anywhere pub static D: u16 = 420; } // accessible from anywhere pub static E: u16 = 1337; 

Note that when you put code in another file, this will be a mod, i.e. you could have a file secret.rs and put the content of the secret module in that file etc.

This means that static variables are by default file specific like in C, with the exception of statics in the entry point file (e.g. A in the example above, the entry point file is usually main.rs or lib.rs), these are available in the whole crate. You can make them "truly global" by declaring them with pub.

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy