реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> compile date-time, в gcc как?
demiurg_spb
сообщение Feb 11 2010, 14:19
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Следующая конструкция (проскакивало в рассылке недавно) работает в MSVC а в avr-gcc, при попытке инициализировать данные в eeprom:
error: initializer element is not constant
Что-нибудь посоветуете?
Код
#ifndef _COMPILE_DATE_TIME_
#define _COMPILE_DATE_TIME_

#define COMPILE_HOUR   (((__TIME__[0]-'0')*10) + (__TIME__[1]-'0'))
#define COMPILE_MINUTE (((__TIME__[3]-'0')*10) + (__TIME__[4]-'0'))
#define COMPILE_SECOND (((__TIME__[6]-'0')*10) + (__TIME__[7]-'0'))

#define COMPILE_YEAR ((((__DATE__ [7]-'0')*10+(__DATE__[8]-'0'))*10+(__DATE__ [9]-'0'))*10+(__DATE__ [10]-'0'))

#define COMPILE_MONTH ((__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ?0 : 5) \
                     : __DATE__ [2] == 'b' ? 1 \
                     : __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M'? 2 : 3) \
                     : __DATE__ [2] == 'y' ? 4 \
                     : __DATE__ [2] == 'l' ? 6 \
                     : __DATE__ [2] == 'g' ? 7 \
                     : __DATE__ [2] == 'p' ? 8 \
                     : __DATE__ [2] == 't' ? 9 \
                     : __DATE__ [2] == 'v' ? 10 : 11)+1)

#define COMPILE_DAY ((__DATE__ [4]==' ' ? 0 : __DATE__[4]-'0')*10+(__DATE__[5]-'0'))
#endif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 11 2010, 14:34
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



А если закомментировать COMPILE_MONTH и COMPILE_DAY ?


Что-то мне подсказывает, что вместо __DATE__ [2] == 'n' ? нужно писать что-то типа #if __DATE__ [2] == 'n'


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 11 2010, 14:46
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(demiurg_spb @ Feb 11 2010, 19:19) *
error: initializer element is not constant


GCC для ARM проглатывает такую конструкцию спокойно. msp-gcc тоже ругается.

Проблема сводится к допустимости конструкции вида
Код
const char * const s = "asdff";
int cday = s[2];


Почему-то GCC для MSP и AVR считает её недопустимой.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 11 2010, 15:25
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(MrYuran @ Feb 11 2010, 17:34) *
А если закомментировать COMPILE_MONTH и COMPILE_DAY ?
Что-то мне подсказывает, что вместо __DATE__ [2] == 'n' ? нужно писать что-то типа #if __DATE__ [2] == 'n'
Нет. Не в этом дело. Можно выкрутится на уровне makefile вызывая dete.exe из utils/bin. Но есть какая-то фигня с путями.
У меня в путях первым делом указан путь к utils/bin, а эта сволочь (винда) вызывает свой date.exe, может просто грохнуть его...

Цитата(AHTOXA @ Feb 11 2010, 17:46) *
Почему-то GCC для MSP и AVR считает её недопустимой.
Интересно почему? Может Клён знает?

Да и ещё из приколов. Я теперь все программы компилю с ключиком -pedantic.
Ибо наткнулся на молчаливое проглатывание присвоения типа const char*const* переменной типа const char*.
А с -pedantic ругается на несоответствие типов.
Правда напрягает что c -pedantic тип void* не может инициализировать тип указатель на функциюsad.gif
Но и с этим жить можно...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016