-
Notifications
You must be signed in to change notification settings - Fork 348
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
#endif
In 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!"
#endif
chrysn
Metadata
Metadata
Assignees
Labels
No labels