-
Notifications
You must be signed in to change notification settings - Fork 372
[Feature Request] Handle if + cfg! in const context #1018
Copy link
Copy link
Open
Description
Since the addition of if in const context, the usage of if + cfg! macro became a thing, since it reduces the need of replication of docs and definition.
pub const MYCONST: i32 = if cfg!(target_os = "linux") {
10
} else if cfg!(windows) {
5
} else {
0
}Currently, cbindgen ignores this kind of construction, but ideally, supporting that would make easier for maintaining C-exported constants that differ on targets.
Possible expected result:
#if defined(⟨USER_DEFINED_LINUX_FLAG_HERE⟩)
#define MYCONST 10
#elsif defined(⟨USER_DEFINED_WINDOWS_FLAG_HERE⟩)
#define MYCONST 5
#else
0
#endifIn const context, an if must always have an else, so it is also common to have panicking macros, like panic!, unimplemented!, todo! and unreacheble! in the else clause. That causes an compiler error with the panic message if it reaches the panic. I think this could generate an #error directive with the message.
Example
pub const MYCONST: i32 = if cfg!(target_os = "linux") {
10
} else if cfg!(windows) {
5
} else {
panic!("We only support linux and windows for now!")
}#if defined(⟨USER_DEFINED_LINUX_FLAG_HERE⟩)
#define MYCONST 10
#elsif defined(⟨USER_DEFINED_WINDOWS_FLAG_HERE⟩)
#define MYCONST 5
#else
#error "We only support linux and windows for now!"
#endifReactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels