Иерархия вызовов Eclipse пропускает вызовы в неопределенных регионах #ifdef - PullRequest
2 голосов
/ 20 мая 2010

Функции "иерархия вызовов" и "объявление" в Eclipse CDT опускают результаты, которые существуют в неопределенных (серых) областях #ifdef.

Пример:

void blah(void) {
#ifndef ABC  
   foo();
#else         //line is greyed out
   bar();     //line is greyed out
#endif        //line is greyed out
}

Иерархия вызовов для foo () будет содержать список blah () в качестве вызывающей стороны; иерархия вызовов для bar () не будет перечислять blah ().

Я не ожидаю, что он выполнит полное разрешение того, какие блоки #define будут скомпилированы, я просто хотел бы, чтобы он возвращал все вызовы / объявления функции, которую я ищу, независимо от окружающих #define блоков это.

Другие IDE, такие как SlickEdit, могут сделать это.

Кто-нибудь знает способ заставить Eclipse принять это поведение?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Я использую Eclipse 3.6.2 с PDT 2.x на Windows 7 64Bit Ultimate.

Я бы ожидал увидеть список всех мест, откуда был вызван метод, однако в основном я вижу только объявление самого метода. То же самое, если я переключусь на иерархию «вызываемого». Даже когда метод вызывается или вызывает методы в одном и том же файле.

0 голосов
/ 20 мая 2010

В функции CDT «Иерархия вызовов» открыто много «ошибок»:

Все они связаны с разрешением привязки (также улучшится ситуация для неявных вызовов конструктора в CDT7.0 ).
И поскольку bar () явно находится внутри недостижимого блока #ifdef , скорее всего, «разрешение привязки» полностью его проигнорирует.
Отсюда и неполная иерархия кал.

...