В моем коде под GCC я получаю довольно много предупреждений этих двух типов.
warning: passing argument 1 of 'foo' from incompatible pointer type
и
warning: assignment from incompatible pointer type
Я знаю, что обычно эти два серьезных предупреждения указывают на то, что в коде действительно что-то не так. Хотя в моем случае, где бы это ни происходило, я очень хорошо знаю, что делаю, и знаю, что могу смело игнорировать эти предупреждения. (И да, я в этом уверен)
Но теперь мой код вырос до такой степени, что эти предупреждения затмевают все остальное, фактически скрывая потенциальные предупреждения, которые могут привести меня к неприятной ошибке. Поэтому я решил помешать им. Вскоре я понял, что не знаю как. Моя версия gcc - 4.4.1, и я знаю, что могу использовать:
#pragma GCC diagnostic ignore "-Wname"
игнорировать любое предупреждение, которое я хочу. Но из единственного большого и полного списка предупреждений GCC, который я обнаружил, я не могу найти, какие из этих двух являются. Я пришел к тому, что выбирал их один за другим и превращал в ошибки, чтобы увидеть, когда компиляция прекратится из-за несовместимого типа указателя, но безрезультатно, как показано ниже.
#pragma GCC diagnostic error "-Wimplicit-int"
#pragma GCC diagnostic error "-Waddress"
#pragma GCC diagnostic error "-Wreturn-type"
.... //e.t.c.
Итак ... вопрос в том, знает ли кто-нибудь название этих предупреждений, чтобы я мог на самом деле помешать им?
EDIT
Из-за обсуждения в комментариях я должен прояснить свое заблуждение, которое заставило меня поверить, что я должен был запретить предупреждения. Я подумал, что в выполнении явных приведений между указателями на структуры была определенная стоимость (независимо от того, насколько она незначительна).
Итак, мое мышление, которое я теперь осознал, было ошибочным, заключалось в том, что, поскольку моя программа работает и долгое время работает на разных платформах, зачем добавлять работу, чтобы просто удовлетворить компилятор?
Ну, теперь я понял, и пишу это здесь на тот случай, если кто-то еще наткнется на эту тему и придерживается того же мнения. Нет затрат, связанных с выполнением явной типизации указателей, и преимущества:
- Компилятор перестает раздражать вас предупреждениями
- Другие люди могут знать, что вы умышленно выполняли там кастинг и не допускали ошибок
Так что здесь для любого другого, у кого может возникнуть тот же вопрос.