-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Clarify conditional compilation #1338
Clarify conditional compilation #1338
Conversation
Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @marioidival (or someone else) soon. If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. Due to the way GitHub handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes. Please see the contribution instructions for more information. |
The Result Reference also describes For the attribute case, compiler decides what to compile at compile time, which I would call conditional compile. For the macro case, the macro conditionally evaluates to either true or false literals at compile time, which can then be used at run-time. Obviously following #[cfg(some_condition)]
fn needs_some_condition() {
}
#[cfg(not(some_condition))]
fn not_needs_some_condition() {
}
fn main() {
if cfg!(some_condition) {
needs_some_condition();
}
if cfg!(not(some_condition)) {
not_needs_some_condition();
}
} |
b44a1f3
to
63408e1
Compare
Introduction of `cfg` attribute and `cfg!` macro operators can be confusing. `cfg!` macro and `cfg` attribute behave differently in terms of conditional compilation. While `cfg` attribute enables conditional compilation of some code, `cfg!` macro conditionally evaluates to `true` or `false` literals for run-time checks.
63408e1
to
b4bf16b
Compare
@gokhanettin Thank you for you clarification |
Update books ## nomicon 5 commits in 6eb24d6e9c0773d4aee68ed5fca121ce3cdf676a..4d2d275997746d35eabfc4d992dfbdcce2f626ed 2020-04-06 02:21:15 +0200 to 2020-04-27 10:24:52 -0400 - Fix example in FFI, section NPO - Update implementation code of `split_at_mut` - Use rust-lang/rust linkchecker on CI. - Use just `std::_` instead of `::std::_` - Remove illegal space. ## reference 2 commits in 3ce94ca..ed22e6fbfcb6ce436e9ea3b4bb4a55b2fb50a57e 2020-04-11 17:00:27 +0200 to 2020-04-24 12:46:22 -0700 - Fix grammer for tuple patterns and tuple struct patterns (rust-lang/reference#794) - Document drop scopes (rust-lang/reference#514) ## book 2 commits in f5db319e0b19c22964398d56bc63103d669e1bba..e37c0e84e2ef73d3a4ebffda8011db6814a3b02d 2020-04-13 08:06:03 -0500 to 2020-04-26 09:31:36 -0500 - Mention short-circuiting in Appendix 02 (rust-lang/book#2318) - Increase HTTP buffer size and add 'Content-Length' header (rust-lang/book#2246) ## rust-by-example 8 commits in c106d1683c3a2b0960f0f0fb01728cbb19807332..ffc99581689fe2455908aaef5f5cf50dd03bb8f5 2020-04-09 09:14:39 -0300 to 2020-04-24 15:05:04 -0300 - Fix Example -> Examples (rust-lang/rust-by-example#1340) - Make unsuffixed literal plural (rust-lang/rust-by-example#1335) - Ensure example error matches the comment (rust-lang/rust-by-example#1336) - Add missing triple backticks (rust-lang/rust-by-example#1339) - Clarify conditional compilation (rust-lang/rust-by-example#1338) - Clarifies how to customize lib crate name (rust-lang/rust-by-example#1337) - Fix bytes of youkoso in shiftjis (rust-lang/rust-by-example#1333) - Fix possible typo (rust-lang/rust-by-example#1334) ## embedded-book 4 commits in 668fb07b6160b9c468f598e839c1e044db65de30..40beccdf1bb8eb9184a2e3b42db8b8c6e394247f 2020-04-13 12:38:16 +0000 to 2020-04-26 17:44:14 +0000 - Add hint on memory config to GDB debugging section (rust-embedded/book#215) - Adds cargo-generate to installation instructions (rust-embedded/book#213) - collections: Fix example allocator (rust-embedded/book#206) - Flip111/patch 8 (rust-embedded/book#233)
Introduction of
cfg
attribute andcfg!
macro operators can be confusing.cfg!
macro andcfg
attribute behave differently in terms of conditional compilation. Whilecfg
attribute enables conditional compilation of some code,cfg!
macro conditionally evaluates totrue
orfalse
literals for run-time checks.