jenya7 0 8 октября, 2018 Опубликовано 8 октября, 2018 (изменено) · Жалоба есть структура typedef struct COMMAND_S { char *name; uint32_t type; uint32_t var_type; uint32_t minargs; uint32_t maxargs; uint32_t (*fp)(unsigned int, char **); uint32_t var_offset; }COMMAND; extern const COMMAND commands[]; я ее инициализирую COMMAND const commands[] = { { "stop", 0, 0, 0, 2, COM_Stop, 0 }, { "start", 0, 0, 0, 2, COM_Start, 0 } } в IAR компилируется и работает без проблем. В Attolic получаю предупреждение Quote initialization from incompatible pointer type [-Wincompatible-pointer-types] initialization from incompatible pointer type [-Wincompatible-pointer-types] с объяснением Quote (near initialization for 'commands[0].fp') (near initialization for 'commands[1].fp') Функции COM_Stop, COM_Start находятся в другом модуле и подключены через заголовочный файл. Что Атолику не нравиться? Изменено 8 октября, 2018 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 8 октября, 2018 Опубликовано 8 октября, 2018 · Жалоба 1 hour ago, jenya7 said: Функции COM_Stop, COM_Start находятся в другом модуле и подключены через заголовочный файл. Прототипы COM_Start, COM_Stop соответствуют? Какие там? Покажите! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 8 октября, 2018 Опубликовано 8 октября, 2018 (изменено) · Жалоба 1 hour ago, Integro said: Прототипы COM_Start, COM_Stop соответствуют? Какие там? Покажите! uint32_t COM_Start(uint32_t argc, char** args); uint32_t COM_Stop(uint32_t argc, char** args); в IAR все прекрасно работает Хм...прикольно... uint32_t (*fp)(unsigned int, char **); это не uint32_t (*fp)(uint32_t, char **); для Атолика Изменено 8 октября, 2018 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 8 октября, 2018 Опубликовано 8 октября, 2018 · Жалоба Ну да, никто не обещал, что unsigned int и uint32_t будут считаться одинаковыми при проверке на совпадение типов. В этом легко углядеть резон: если мы пытаемся делать переносимый код, компилятор помогает отловить места, где разрядность целого типа может быть иной на другой платформе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 120 8 октября, 2018 Опубликовано 8 октября, 2018 · Жалоба Я бы грешил на char * name, который должен быть char const * name. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 8 октября, 2018 Опубликовано 8 октября, 2018 · Жалоба да, GCC так же бы отреагировал, но он бы пояснил что uint32_t это long unsigned int Edit: хотя нет, в данном случае он так бы и предупредил что не совместимые типы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 8 октября, 2018 Опубликовано 8 октября, 2018 · Жалоба 2 hours ago, scifi said: Ну да, никто не обещал, что unsigned int и uint32_t будут считаться одинаковыми при проверке на совпадение типов. В этом легко углядеть резон: если мы пытаемся делать переносимый код, компилятор помогает отловить места, где разрядность целого типа может быть иной на другой платформе. получается Атолик круче IAR :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 8 октября, 2018 Опубликовано 8 октября, 2018 · Жалоба 2 hours ago, Сергей Борщ said: Я бы грешил на char * name, который должен быть char const * name. я пробовал убрать const. все равно получал предупреждение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться