gcc -W -Wall -O -pedantic -std = c99 против clang с теми же параметрами - PullRequest
0 голосов
/ 01 декабря 2011

Попытка вывести адрес указателя в десятичной форме, используя спецификатор преобразования% zu. Работает нормально, как и ожидалось, за исключением того, что gcc предупреждает «format format% zu» ожидает тип «size_t», но аргумент 4 имеет тип «long int *». Используемые опции GCC показаны в вопросе. GCC по-прежнему предупреждает без каких-либо параметров (кроме -std = c99). однако clang не выдает никаких предупреждений с теми же параметрами. Это на OS X 10.7. Просто интересно, почему Clang не выдает никаких предупреждений? Gcc "лучше" чем clang для отладки / компиляции?

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Это, похоже, характерно для модификатора размера z в clang;вы делаете получаете предупреждение с %lu, %u, %hu и т. д. (даже без каких-либо опций)

Вообще говоря, мой опыт подсказывает, что у кланга большеполезные предупреждающие сообщения, чем GCC.Это исключение из этого опыта.Я отправлю сообщение об ошибке.

0 голосов
/ 01 декабря 2011

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

printf ("%zu\n", (size_t)my_ptr);
...