2010-05-20 2 views
2

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

Пример:

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

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

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

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

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

Спасибо.

ответ

0

Есть много "ошибок" открылась на КРТ "Call Hierarchy" особенность:

Все они связаны с связывания разрешение (также ситуация will improve for implicit constructor calls in CDT7.0).
И поскольку bar() явно находится в пределах Unreachable #ifdef block, скорее всего, «обязательное разрешение» полностью игнорирует его.
Отсюда неполная иерархия.

0

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

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

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