jcxz 184 17 января, 2019 Опубликовано 17 января, 2019 · Жалоба 50 минут назад, Arlleex сказал: А можно пояснить назначение и места использования следующих макроопределений (с остальными - понятно): #define lenof(var) (sizeof(var) * ((CHAR_BIT + 7) / 8)) #define ptrsizeof(m) (void *)&(m), sizeof(m) Особенно интересует второе. Заранее благодарен Возвращает размер var в байтах. А не в char-ах как sizeof(). Для ARM sizeof() == lenof(). Осталось у меня с тех времён, когда писал для DSP. Развёртывается в пару: указатель на m, sizeof(m). Это полезно там, где например нужно в функцию передать указатель на массив и его размер. Чтобы указать один раз. Я аргументы всех подобных функций (принимающих указатель + размер массива) стараюсь так строить, чтобы эти два аргумента шли в таком порядке, друг за другом. Подобный способ используется в последних версиях VS (visual studia) для многих функций типа sprintf(...) и т.п. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 17 января, 2019 Опубликовано 17 января, 2019 · Жалоба 2 hours ago, Arlleex said: Это расширение компилятора, как я понимаю, а не утвержденная Стандартом финтиклюшка. Это как раз стандарт языка а не финтифлюшки в голове http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 6.7.10 Static assertions 7.2 Diagnostics <assert.h> Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 17 января, 2019 Опубликовано 17 января, 2019 · Жалоба 29 минут назад, haker_fox сказал: Впервую очередь напрягают баги оболочки, которую я вынужден использовать для отладки (пишу в Slick Edit). Качество и правильность кодогенерации не оценивал. Но сейчас в проекте как раз ищу пару плавающих багов. Есть подозрение, что портится память. Может быть и компилятор виновать. Но, с другой стороны, хардфолты не вылетают. Но это ни о чём не говорит. А вы до сих пор 7.80.4 используете. Нашёл в вашем сообщении. Я пользую 7.80.4 и 8.32. Генерить код инструментом, про который заведомо известно, что в каких-то случаях он генерит неверный код - это как гулять по минному полю. Понятно разве что если другого выбора нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 17 января, 2019 Опубликовано 17 января, 2019 · Жалоба Только что, sasamy сказал: Это как раз стандарт языка а не финтифлюшки в голове http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 6.7.10 Static assertions 7.2 Diagnostics <assert.h> Убедили. Но для C99 (как мне это нужно) - этого нет. Вернее, IAR 3.10 для STM8 не даст выбрать C11 (потому что его там нет). Это я вечером проверю дома. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 17 января, 2019 Опубликовано 17 января, 2019 · Жалоба 8 минут назад, Arlleex сказал: Но для C99 (как мне это нужно) - этого нет. Вернее, IAR 3.10 для STM8 не даст выбрать C11 (потому что его там нет). Это я вечером проверю дома. Я вот не понимаю: ЗАЧЕМ??? Ведь то же самое делается простым макросом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 17 января, 2019 Опубликовано 17 января, 2019 · Жалоба Только что, jcxz сказал: Я вот не понимаю: ЗАЧЕМ??? Ведь то же самое делается простым макросом. По сути - не за чем. Итак сделано макросом, еще и функциональности побольше Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 17 января, 2019 Опубликовано 17 января, 2019 · Жалоба 7 минут назад, Arlleex сказал: По сути - не за чем. Итак сделано макросом, еще и функциональности побольше Вот именно. Я когда-то попробовал включить этот с11 или с99 (не помню уж) и кроме полезного, там повылазила ещё куча ненужных ограничений по написанию кода. Так что я плюнул и реализовал полезные мне функции самостоятельно, макросами. Потому и называются они у меня assert_static, а не static_assert, на всякий случай, чтобы не было пересечений с общепринятыми, но при этом было интуитивно понятно их назначение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 17 января, 2019 Опубликовано 17 января, 2019 · Жалоба 40 minutes ago, jcxz said: это как гулять по минному полю Согласен! Запустил IAR 8.32.2. Надесь, там не успели наляпать ошибок. 14 minutes ago, jcxz said: Потому и называются они у меня assert_static, а не static_assert Вот, а я вчера лом сильно запутался, когда цитировал сообщения) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 17 января, 2019 Опубликовано 17 января, 2019 · Жалоба 3 минуты назад, haker_fox сказал: Вот, а я вчера лом сильно запутался, когда цитировал сообщения) А Вы используйте CTRL+C Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 18 января, 2019 Опубликовано 18 января, 2019 · Жалоба On 1/17/2019 at 11:34 AM, Arlleex said: Но для C99 (как мне это нужно) - этого нет. Вернее, IAR 3.10 для STM8 не даст выбрать C11 (потому что его там нет). https://stackoverflow.com/questions/25552852/how-to-detect-if-a-compiler-supports-static-assert/25553484#25553484 Note that some compilers (e.g., IAR) also have a static_assert keyword extension even if they don't support C11. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 18 января, 2019 Опубликовано 18 января, 2019 · Жалоба On 1/17/2019 at 12:05 PM, haker_fox said: Вот, а я вчера лом сильно запутался, когда цитировал сообщения) On 1/17/2019 at 11:51 AM, jcxz said: называются они у меня assert_static, а не static_assert, на всякий случай, чтобы не было пересечений с общепринятыми, но при этом было интуитивно понятно их назначение. интуитивно понятный макрос с искаженным сиснтаксисом и семантикой ? пипец какой-то Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 18 января, 2019 Опубликовано 18 января, 2019 · Жалоба 17 минут назад, sasamy сказал: интуитивно понятный макрос с искаженным сиснтаксисом и семантикой ? пипец какой-то Я вам что-то навязывал, заставлял использовать? Интуитивно понятный мне - этого достаточно. PS: Если по делу нечего сказать, лучше промолчать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 18 января, 2019 Опубликовано 18 января, 2019 · Жалоба 12 minutes ago, jcxz said: Интуитивно понятный мне - этого достаточно Странный подход к делу. Я не противник макросов, но можно же было нормально сделать - по стандарту и понятное всем. Quote Я вам что-то навязывал мне - нет PS аналогичный Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 18 января, 2019 Опубликовано 18 января, 2019 · Жалоба 1 минуту назад, sasamy сказал: Странный подход к делу. Я не противник макросов, но можно же было нормально сделать - по стандарту и понятное всем. И как это будет "по стандарту и нормально"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 18 января, 2019 Опубликовано 18 января, 2019 · Жалоба 1 hour ago, jcxz said: И как это будет "по стандарту и нормально"? хотя бы так #if !defined(static_assert) #define static_assert(x,m) ((x) ? 1: 1 / (x)) #endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться