LINUX.ORG.RU

Хочу gcc warning если во внутреннем scope есть переменная с тем же именем, что и во внешнем.

 , ,


2

2

Можно ли как-нибудь gcc заставить это делать?

class C {
    int x;
    void f(int x) {   // хочу тут warning: x уже есть в scope, объявлен в такой-то строке
        if (...) {
            int x   // и тут тоже
        }
    }
}
★★★★★

-Wshadow

рекомендую такие для си

-Wreturn-type -Wpointer-sign -Wsign-compare -Wshadow -Wpointer-arith -Wimplicit -Wformat -Werror -Wno-parentheses -Wuninitialized

и такие для c++ (те которые исчезли gcc в c++ режиме не принимает ввиду более строгой базовой спецификации) -Wreturn-type -Wsign-compare -Wshadow -Wpointer-arith -Wformat -Werror -Wno-parentheses -Wuninitialized

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Вообще у меня -Wall -Wextra -Wpedantic, большинство перечисленного тобой там уже включено. Странно что -Wshadow нет.

dimgel ★★★★★
() автор топика
Ответ на: комментарий от dimgel

Да и них логика вообще странная, зато там есть всякое лишнее, даже просто в -Wall бесящий варнинг на (A && B || C) <-> ((A && B) || C).

firkax ★★★★★
()
Ответ на: комментарий от EXL

Почему «поэтому»? Оно не поможет отключить мусорные варнинги коих не меньше половины.

firkax ★★★★★
()
Ответ на: комментарий от dimgel

-Wpedantic

Оно ругается на безымянные union и struct. С именами уродливо получается.

X512 ★★★★★
()
Ответ на: комментарий от firkax

А мне, наоборот, нравится использовать те же краткие имена. Некоторые языки типа раста и f# даже поощряют это

anonymous
()
Ответ на: комментарий от EXL

Нет, не поэтому. И отсутствие -Weverything в gcc – осознанный выбор.

В clang этот флаг имеет назначение, не связанное со штатной сборкой проекта. Это может быть отладка самого clang или возможность программисту открыть для себя предупреждения, о которых он не знал (т.е. изредка включаешь сборку с -Weverything и смотришь, нет ли там чего полезного для твоего проекта).

При этом некоторые люди продолжают (или продолжали) использовать его для регулярных сборок, собирая по пути связанные с этим проблемы.

Разработчикам gcc вышеописанные применения флага не кажутся важными, поэтому там его нет, вместо него – большой документ с описанием всех предупреждений, который можно изредка перечитывать вместе с заметками о нововведениях. Кому как удобнее.

lwo
()
Ответ на: комментарий от bugfixer

Вобщем-то ничего. Но есть два подхода - включать нужное либо отключать ненужное, я себе выбрал первый.

firkax ★★★★★
()
Ответ на: комментарий от firkax

включать нужное либо отключать ненужное, я себе выбрал первый.

Имхо - это менее практично: легко пропустить «полезняшки» при смене версии компилятора, например.

bugfixer ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.