2016-11-06 6 views
1

Say мы defie Num где (локальная переменная)На основе логического рассуждения о состоянии инициализации переменной

int num; 

затем, если инициализирован, скажем:

num = 420; 

мы делаем что-то, если нет, мы этого не делаем.

Возможно ли это в C99/c в целом? не может найти его в руководстве.

+1

Вы зависите от своего действия от инициализации или значения 'num'? – Downvoter

+4

Вы спрашиваете, можно ли программно определить, инициализирована ли переменная или нет? Если это так, ответ - нет. В C вы, программист, должны отслеживать это. –

+0

@CoolGuy да, это то, что я просил –

ответ

2

Если вы просто написать

num = 420; 

, а затем попытаться зависеть ваши действия на самом деле, если num был инициализирован, то нет, вы не можете сделать это.
Причина в том, что C не сохраняет информацию, была ли инициализирована переменная или нет, где бы то ни было во время выполнения. Только компилятор знает, что во время компиляции.
Проверка того, не работает ли num == 420. Если это автоматическая переменная и не была инициализирована, ее значение неопределенно и вполне может быть 420 без явной инициализации. Доступ к этой переменной без инициализации в любом случае не определен.

Что вы можете сделать, это зависит инициализацию от некоторых условий, например:

if (cond) 
    num = 420; 

Теперь !cond эквивалентно «num не была инициализирована.» Вы можете зависеть от любого дополнительного кода от этого условия cond, и он будет выполняться только в том случае, если значение cond истинно, что эквивалентно «num» было инициализировано 420 ».

+0

Clear as crystal, cheers fam! –