Перейти к содержанию
    

Gcc, выдает варнинг вместо ошибки.

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 **'

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

 

Это уже видел. Не работает, только если -Werror включить, но это будут все варнинги ошибками. Видимо так и поступлю, только не сразу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Можно в конкретном месте ключи для конкретного кода переключать. Делается прагмами.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно в конкретном месте ключи для конкретного кода переключать. Делается прагмами.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, предлагаю. Как я понял, вы готовы в некоторой мере на эту работу.

 

Кстати, у 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, предлагаю. Как я понял, вы готовы в некоторой мере на эту работу.

Это странное предложение, не имеющее ни малейшего практического смысла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Функции вместо указателя на int (int*) передаётся указатель на указатель на int (int**).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Функции вместо указателя на int (int*) передаётся указатель на указатель на int (int**).

ну она и будет работать с адресом который ей передали, который содержит адрес указателя на переменную!?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но функция - то работает с адресом int, а не указателя на int.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но функция - то работает с адресом int, а не указателя на int.

Это нормально для языка C - там допустимо неявное приведение указателя к другому типу указываемого объекта. Поэтому только предупреждение.

В языке C++ такое приведение не допускается - будет выдана ошибка.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТС, когда такие вопросы задаешь, всегда указывай версию компилятора и аргументы сборки.

 

по теме, спасет:

-Werror -Wfatal-errors

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

по теме, спасет:-Werror -Wfatal-errors
+1

Но можно и более избирательно:

-Werror=foo

 

Также, весьма полезными ключиками в контексте темы могут быть:

-Wc++-compat

-Wcast-qual

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...