Есть ли способ условной компиляции, основанный на существовании константы? - PullRequest
2 голосов
/ 11 марта 2020

Библиотека lib c определяет количество констант, которые могут быть переданы в качестве флагов open(), таких как O_APPEND, O_CREAT, et c. Некоторые из этих флагов определены только для определенных целей ОС. Было бы неплохо, если бы был способ свободно использовать O_WHATEVER в моем коде, не беспокоясь о том, действительно ли оно определено в lib c:

#[cfg(???)]
const O_WHATEVER = libc::O_WHATEVER;
#[cfg(not(???))]
const O_WHATEVER = 0;

Было бы неплохо, если бы ??? в моем примере выше было чем-то вроде is_defined(libc::O_WHATEVER). В противном случае мне нужно было бы выяснить все комбинации ОС, в которых O_WHATEVER определен в lib c, и это было бы настоящей болью.

1 Ответ

3 голосов
/ 11 марта 2020

Не по ржавчине 1.41. RF C 2523 - cfg_version и cfg_accessible вводит:

#[cfg(accessible(libc::O_WHATEVER))]
const O_WHATEVER = libc::O_WHATEVER;
...