Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Gcc, выдает варнинг вместо ошибки.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
ar__systems
Код
void Dummy(int* a) {
    *a = 0;
};

void Test() {
  int* a = 0;
  Dummy(&a);
};


Выдает варнинг, тогда как я бы хотел видеть в этом месте ошибку. Как переключить?

test.c:1076:3: warning: passing argument 1 of 'Dummy' from incompatible p
inter type [enabled by default]
test_emac.c:873:6: note: expected 'int *' but argument is of type 'int **'
ar__systems
Цитата(neiver @ Oct 7 2013, 13:20) *



Это уже видел. Не работает, только если -Werror включить, но это будут все варнинги ошибками. Видимо так и поступлю, только не сразу.
Ixt
Цитата(ar__systems @ Oct 7 2013, 23:03) *
Выдает варнинг, тогда как я бы хотел видеть в этом месте ошибку. Как переключить?


Можно в конкретном месте ключи для конкретного кода переключать. Делается прагмами.
ar__systems
Цитата(Ixt @ Oct 8 2013, 02:38) *
Можно в конкретном месте ключи для конкретного кода переключать. Делается прагмами.


А в чем смысл? Вы мне предлагаете вручную отлавливать ворнинги, потом их прагмами в ошибки переводить?

Я может неточно выразился, я хотел сказать все подобные ситуации должны приводить к ошибке.
Ixt
Да, предлагаю. Как я понял, вы готовы в некоторой мере на эту работу.

Кстати, у Werror есть 2 метода использования. Возможно вам больше подойдёт второй:

Цитата
-Werror
Make all warnings into errors.
-Werror=
Make the specified warning into an error. The specifier for a warning is appended, for example -Werror=switch turns the warnings controlled by -Wswitch into errors. This switch takes a negative form, to be used to negate -Werror for specific warnings, for example -Wno-error=switch makes -Wswitch warnings not be errors, even when -Werror is in effect. You can use the -fdiagnostics-show-option option to have each controllable warning amended with the option which controls it, to determine what to use with this option.

Note that specifying -Werror=foo automatically implies -Wfoo. However, -Wno-error=foo does not imply anything.
ar__systems
Цитата(Ixt @ Oct 8 2013, 10:44) *
Да, предлагаю. Как я понял, вы готовы в некоторой мере на эту работу.

Это странное предложение, не имеющее ни малейшего практического смысла.
Lagman
а где там ошибка?
AHTOXA
Функции вместо указателя на int (int*) передаётся указатель на указатель на int (int**).
Lagman
Цитата(AHTOXA @ Nov 9 2013, 22:09) *
Функции вместо указателя на int (int*) передаётся указатель на указатель на int (int**).

ну она и будет работать с адресом который ей передали, который содержит адрес указателя на переменную!?
Genadi Zawidowski
Но функция - то работает с адресом int, а не указателя на int.
alx2
Цитата(Genadi Zawidowski @ Nov 20 2013, 04:43) *
Но функция - то работает с адресом int, а не указателя на int.

Это нормально для языка C - там допустимо неявное приведение указателя к другому типу указываемого объекта. Поэтому только предупреждение.
В языке C++ такое приведение не допускается - будет выдана ошибка.
federal
ТС, когда такие вопросы задаешь, всегда указывай версию компилятора и аргументы сборки.

по теме, спасет:
-Werror -Wfatal-errors
demiurg_spb
Цитата(federal @ Nov 24 2013, 23:51) *
по теме, спасет:-Werror -Wfatal-errors
+1
Но можно и более избирательно:
-Werror=foo

Также, весьма полезными ключиками в контексте темы могут быть:
-Wc++-compat
-Wcast-qual
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.