Вопрос

У меня есть следующий код:

родовое слово

Он нормально компилируется с "gcc -Wall -ansi -pedantic".Но с другим набором инструментов (Rowley) он жалуется на

родовое слово

в строке, где стоит char ** t.Это действительно незаконный код или все в порядке?

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

инициализация строкового массива

Это было полезно?

Решение

Мне кажется совершенно законным;char *[3] распадается на char **, поэтому присвоение должно быть действительным.

Ни GCC 4.4.5, ни CLang 1.1 не жалуются.

Другие советы

Хотя на практике array1 должен распадаться на указатель типа char **, его реальный тип - это char *[3], отсюда и предупреждение.

Чтобы подавить предупреждение, вы можете попробовать явно применить его:

родовое слово

array1 - это (char *)[3], который семантически отличается от char **, хотя при присвоении он должен быть изящно деградирован до char **

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

Попробуйте поставить:

родовое слово

в одном модуле и:

родовое слово

в другом компилируйте и связывайте.(Я не пробовал ...) Я ожидал, что что-то пойдет не так ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top