gcc может точно поймать бесполезные условные выражения?

Судя по последним данным, вы получите желаемый результат:

WITH rCTE AS(
    SELECT 1 AS Level,
           id AS GroupID,
           [name] AS GroupName,
           CONVERT(nvarchar(10),NULL) AS ParentID, --This'll be uniqueidentifier in your real version
           CONVERT(nvarchar(255),NULL) AS ParentName
    FROM BPAGroup G
    WHERE NOT EXISTS (SELECT 1
                      FROM BPAGroupGroup e
                      WHERE e.memberid = G.id)
    UNION ALL
    SELECT r.Level + 1,
           G.id AS GroupID,
           G.[name] AS GroupName,
           r.GroupID AS ParentID,
           r.[GroupName] AS ParentName
    FROM BPAGroup G
         JOIN BPAGroupGroup GG ON G.id = GG.memberid
         JOIN rCTE r ON GG.groupid = r.GroupID)
SELECT *
FROM rCTE;

db <> fiddle

Важно, чтобы вы понимали, как это работает хотя. Как вы сказали в своем посте, вам, кажется, нужно каждый раз пересматривать их. Нет ничего плохого в том, что нужно что-то проверять синтаксис (есть некоторые вещи, которые я иногда с треском проваливаю при запоминании, особенно новые вещи OPENJSON), но понимаете ли вы, как это работает? Если нет, какой бит не так ли?

17
задан Tim Post 11 November 2009 в 15:36
поделиться

5 ответов

/* foo.c */
int main() {
   if (1) ; 
   return 0;
}

gcc -Wextra -c foo.c
foo.c: In function ‘main’:
foo.c:2: warning: empty body in an if-statement
32
ответ дан 30 November 2019 в 10:27
поделиться

После глубокого изучения руководства по gcc:

-Wempty-body
    Warn if an empty body occurs in an `if', `else' or `do while' statement. This warning is also enabled by
-Wextra.

Как некоторые другие плакаты написал: -Wextra должна это сделать

Пример кода:

int main(){

        if (0);
                printf("launch missiles");
        return 0;
}


$gcc -Wempty-body foo.c
warn.c: In function ‘main’:
warn.c:5: warning: suggest braces around empty body in an ‘if’ statement
8
ответ дан 30 November 2019 в 10:27
поделиться

В дополнение к вышесказанному, если вы столкнетесь с проблемой поиска ошибки с помощью valgrind или аналогичного профилировщика выполнения , возможно, вам стоит рассмотреть возможность использования инструмента статического анализа, такого как lint . Лично я использую PC-LINT , который отлавливает все виды ошибок такого типа.

2
ответ дан 30 November 2019 в 10:27
поделиться

Попробуйте -Wextra

7
ответ дан 30 November 2019 в 10:27
поделиться

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

Например, в vim:

gg=G
6
ответ дан 30 November 2019 в 10:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: