2013-04-04 2 views
0

В c, когда переменная определяется static внутри функции, значение переменной сохраняется все время. Вероятно, он хранится в разделе bss или data.контроль статической переменной внутри функции в eclipse CDT

Однако при отладке CDT Eclipse при попытке проверить эту переменную ввод имени переменной в панели выражений отображает только переменную, когда в стеке находится стек стека, например локальная переменная.

Это ошибка в затмении?

Редактировать: В встроенной рабочей среде IAR, статические переменные в функциях можно наблюдать вне функции при отладке, поэтому это возможно.

ответ

0

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

Итак ... нет ... это не ошибка.

+0

В встроенном верстаке IAR, статические переменные в функциях можно наблюдать вне функции, поэтому это возможно. – stdcall

+0

Возможно ... но тем не менее они все еще не заняты. Я бы сказал, что IAR разрушает инкапсуляцию объявленной области переменной при этом. –

+0

Почему мы заботимся об инкапсуляции, мы не выполняем «объектно-ориентированную» отладку. Скажем, например, у меня есть функция со статической переменной, которая содержит количество раз, когда вызывалась функция. это ценная информация для отладки даже вне области действия. – stdcall

0

Необходимо определить статическую переменную с помощью функции, чтобы определить область действия, например. foo::myvar если myvar определяется в функции foo.

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