2016-08-11 1 views
0

Есть ли способ определить минимальное и максимальное значение, которое я могу передать в параметр компилятора. Например:Как определить значение min и max, которое я могу передать в параметр компилятора?

-fconstexpr-глубина = п

или

-falign-переходы [= п]

Каковы минимальные и максимальные значения для п ? Или даже лучше было бы знать, что представляет собой весь диапазон значений со всеми промежуточными значениями.

Я знаю, что это может и будет зависеть от кода, который я хочу скомпилировать. Но я думаю, что для нескольких параметров компилятора максимальные и минимальные входные значения могут быть определены независимо от кода для компиляции.

ответ

1

Предположим, вы спрашиваете о GCC (это следует из тегов).

вариант fconstexpr глубина определяется в НКУ/с-семьи/c.opt таким образом:

fconstexpr-depth= 
C++ ObjC++ Joined RejectNegative UInteger Var(max_constexpr_depth) Init(512) 
-fconstexpr-depth=<number>  Specify maximum constexpr recursion depth. 

Что вы можете увидеть сразу: Описание опции GCC не имеет явных ограничений значений. Просто значение по умолчанию (512) и max_constexpr_depth переменная, к которой привязано это значение параметра. Давайте рассмотрим его в исходном коде ...

static bool 
push_cx_call_context (tree call) 
{ 
    ..... some code ..... 
    if (call_stack.length() > (unsigned) max_constexpr_depth) 
    return false; 
    return true; 
} 

Как вы видите, эта переменная используется без каких-либо ограничений. Правильный ответ: нет НИКАКИХ ПРЕДЕЛОВ. Вы можете пройти 5000 или 5000000, никто не заботится, все предполагают, что вы знаете, что делаете.

И, конечно, без ограничений компилятор не может сообщить вам о них.

Смежные вопросы