Я хочу использовать gcc для выполнения некоторой проверки во время компиляции входных данных функций, если компилятор знает, что они являются константами.насколько я могу видеть, это должно работать.
Примечание: __builtin_constant_p (выражение) должно возвращать, известно ли, что выражение является константой во время компиляции.будет ли порт <2 при вызове uart (port), должен работать следующий код: </p>
#include <stdio.h>
void _uart(int port) {
printf("port is %d", port);
}
#define uart(port) \
static_assert(__builtin_constant_p(port)? port<2: 1, "parameter port must be < 2"); \
_uart(port)
int main(void) {
int x=1;
uart(x);
}
Это работает при вызове uart ().К сожалению, это не совсем работает для непостоянного х.По какой-то причине static_assert не может обработать случай, когда x не является константой, хотя в теории __builtin_constant_p () даже не передаст ей константу.Я получаю сообщение об ошибке:
c:\>gcc a.cpp -std=c++0x -Os
a.cpp: In function 'int main()':
a.cpp:13: error: 'x' cannot appear in a constant-expression
Есть идеи?