Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
Если памяти для задачи недостаточно, то не принципиально, каким образом она будет исчерпана.
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: Вопросы по С/С++ (СИ)
Хотелось бы узнать почему именно 258 при 300 озу, разъясните пожалуйста. Хочется действовать понимая что то, а не просто прописывать цифры потому, что так надо.
«И всё-таки она вертится!»
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
это оценочное мнение. стек в проектах МК расходуется "непредсказуемо" только прерываниями. при входе в обработчик может потребоваться (на глазок) сохранить до 16 рабочих регистров (из практики, на примере AVR), что потребует 34 байта стека. еще немножко в запас - вот и выходит 300.Apparatchik писал(а):почему именно 258 при 300 озу
дураку стеклянный х#й - не надолго игрушка. такому программисту лучше заняться чем-то другимМурик писал(а):А если эта функция вызвана из 1500 последовательно вызванных функций, в которых в свою очередь тоже выделялись переменные или массивы в стеке?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
Здравствуйте
Подскажите пожалуйста, как узнать в какой dll находится ф-ция round ?
Пишу скрипт на си в среде WinCC.
В данной среде нету возможности подключать хидеры, вместо этого используются вот такие конструкции
Подскажите пожалуйста, как узнать в какой dll находится ф-ция round ?
Пишу скрипт на си в среде WinCC.
В данной среде нету возможности подключать хидеры, вместо этого используются вот такие конструкции
Код: Выделить всё
#pragma code ("oleaut32.dll")
INT SystemTimeToVariantTime(LPSYSTEMTIME lpSystemTime, DATE *pvtime);
INT VariantTimeToSystemTime(double vtime, LPSYSTEMTIME IpSystemTime);
#pragma code () Tell Me The Truth
Re: Вопросы по С/С++ (СИ)
[uquote="FreshMan",url="/forum/viewtopic.php?p=3498476#p3498476"]как узнать в какой dll находится ф-ция round ?[/uquote]Мельком глянул - язычок таксе, канешн
диалектом C назвать его язык не поворачивается. Из общих соображений функция round должна располагаться в какой-нибудь math.dll (по аналогии с math.h). Если это средство программирования поддерживает макросы и явное приведение типов, можно сделать "функцию" примерно так:
Код: Выделить всё
#define round(x) (int)(x+0.5)Re: Вопросы по С/С++ (СИ)
[uquote="AAX",url="/forum/viewtopic.php?p=3498951#p3498951"]Из общих соображений функция round должна располагаться в какой-нибудь math.dll (по аналогии с math.h).[/uquote]
такой вариант не сработал
если можете, прошу внести ясность, так называемые ф-ции Win API сокрыты в dllках ?
такой вариант не сработал
если можете, прошу внести ясность, так называемые ф-ции Win API сокрыты в dllках ?
Tell Me The Truth
Re: Вопросы по С/С++ (СИ)
Насколько мне известно среди WinAPI нет функции round. Возможно найдется в msvcrt.dll.
Re: Вопросы по С/С++ (СИ)
[uquote="FreshMan",url="/forum/viewtopic.php?p=3500298#p3500298"]такой вариант не сработал
если можете, прошу внести ясность, так называемые ф-ции Win API сокрыты в dllках ?[/uquote]А вариант с #define? Тоже не работает?
Функции Windows API находятся в dll. На всякий случай - round не имеет отношения к Win API
если можете, прошу внести ясность, так называемые ф-ции Win API сокрыты в dllках ?[/uquote]А вариант с #define? Тоже не работает?
Функции Windows API находятся в dll. На всякий случай - round не имеет отношения к Win API
для начала нужно найти msvcrt.dll. Не на каждом компьютере установлена MSVS.Мурик писал(а):Насколько мне известно среди WinAPI нет функции round. Возможно найдется в msvcrt.dll.
Re: Вопросы по С/С++ (СИ)
Ок, завтра попробую применить ваши советы
спасибо за отклики
в свете вышеизложенного спрошу вот еще что, как вычислить в моем случае разницу между двумя датами зная локальное и системное время ?
В VBS есть спец.фция, там жизнь проще
спасибо за отклики
в свете вышеизложенного спрошу вот еще что, как вычислить в моем случае разницу между двумя датами зная локальное и системное время ?
В VBS есть спец.фция, там жизнь проще
Tell Me The Truth
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Вообще, универсальный round можно сделать так;
Код: Выделить всё
#include <stdint.h>
//----------------------------------------------------------------------------------------------------
//округление до заданного количества цифр после запятой
//----------------------------------------------------------------------------------------------------
double Round(double value,uint32_t digit)
{
double d=1;
for(uint32_t n=0;n<digit;n++) d*=10;
if (value>=0) return(floor(value*d+0.5)/d);
return(ceil(value*d-0.5)/d);
}
Последний раз редактировалось da-nie Чт ноя 08, 2018 06:22:28, всего редактировалось 1 раз.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Re: Вопросы по С/С++ (СИ)
Входит в комплект поставки ОС начиная с Windows 95 OSR2.AAX писал(а):для начала нужно найти msvcrt.dll
Re: Вопросы по С/С++ (СИ)
посмотрел на код, приведённый da-nie, и понял, что я забыл про существование отрицательных чисел
Мой первый #define неправильный, правильный теперь такой:только я сомневаюсь, что этот winCC осилит такой синтаксис (приведение типов, и Элвиса
)
[uquote="Мурик",url="/forum/viewtopic.php?p=3500391#p3500391"]
Код: Выделить всё
#define round(x) (int)(x>0?(x+0.5):(x-0.5))[uquote="Мурик",url="/forum/viewtopic.php?p=3500391#p3500391"]
Входит в комплект поставки ОС начиная с Windows 95 OSR2.[/uquote]С очень большой вероятностью эта программа будет работать под WinCE либо Embedded. Причём версий древних, как экскременты мамонта. Если бы речь шла о "нормальных" ОС, наверное, данный вопрос вообще бы не возник.AAX писал(а):для начала нужно найти msvcrt.dll
Re: Вопросы по С/С++ (СИ)
[uquote="AAX",url="/forum/viewtopic.php?p=3500445#p3500445"]посмотрел на код, приведённый da-nie, и понял, что я забыл про существование отрицательных чисел
Мой первый #define неправильный, правильный теперь такой:только я сомневаюсь, что этот winCC осилит такой синтаксис (приведение типов, и Элвиса
)[/uquote]
дефайн сработал
немного допилил его для отрицательных чисел
Код: Выделить всё
#define round(x) (int)(x>0?(x+0.5):(x-0.5))дефайн сработал
немного допилил его для отрицательных чисел
Код: Выделить всё
#define round(x) (long int)(x>=0?( floor(x+0.5)):( ceil(x-0.5) ) )
Tell Me The Truth
Re: Вопросы по С/С++ (СИ)
[uquote="FreshMan",url="/forum/viewtopic.php?p=3500789#p3500789"]немного допилил его для отрицательных чисел [/uquote]т.е. floor и ceil в этом языке есть из коробки? А round - отсутствует? Ну, и floor с ceil-ом лишние же тут. Мой вариант должен справляться с округлением без модификаций. А в этом языке обязательно писать long int? Просто long не достаточно?
Код: Выделить всё
#define round(x) (long int)(x>=0?( floor(x+0.5)):( ceil(x-0.5) ) )Re: Вопросы по С/С++ (СИ)
даFreshMan писал(а):т.е. floor и ceil в этом языке есть из коробки?
даFreshMan писал(а):А round - отсутствует?
попробовал так
Код: Выделить всё
#define round(x) (long)(x>0?(x+0.5):(x-0.5) )подскажите как в моем случае работать с датой ?
мне надо вычислить разницу между системным и локальным временем в часах
Tell Me The Truth
Re: Вопросы по С/С++ (СИ)
я не знаю ничего про winCC, а макрос на стройке нашёл 
могу сказать, как на обычном С сделать. Но для этого нужно задачу понимать. Фраза "разница между системным и локальным временем" вызывает у меня странные ассоциации. Типа, как понять, насколько врут часы в компе
Системное время и есть локальное.
могу сказать, как на обычном С сделать. Но для этого нужно задачу понимать. Фраза "разница между системным и локальным временем" вызывает у меня странные ассоциации. Типа, как понять, насколько врут часы в компе
Re: Вопросы по С/С++ (СИ)
Видимо речь идет о времени по Гринвичу и локальном.
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
В моей Visual Studio 2010 я его тоже не нашёл.А round - отсутствует?
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Re: Вопросы по С/С++ (СИ)
[uquote="Мурик",url="/forum/viewtopic.php?p=3500950#p3500950"]Видимо речь идет о времени по Гринвичу и локальном.[/uquote]
совершенно верно !
совершенно верно !
Tell Me The Truth
Re: Вопросы по С/С++ (СИ)
1) экономный, но сложный для восприятия невооружённым глазом путь:
2) легко читаемый, но требующий чуть больше ресурсов:
0) самый лучший вариант, но я не знаю, как это сделать подвендой - просто взять константу timezone из системных настроек
Код: Выделить всё
float hours_timezone_diff = 0;
time_t time_now = time(NULL);
char *as_string_timezone = malloc(11 * sizeof(char));
strftime(as_string_timezone, 10, "%z", localtime(&time_now));
short converted_timezone= atoi(as_string_timezone);
short timezone_round_hours = converted_timezone / 100.;
hours_timezone_diff = timezone_round_hours + (converted_timezone - timezone_round_hours * 100)/60.;
Код: Выделить всё
float hours_timezone_diff = 0;
time_t time1, time2;
time1 = time(NULL);
time2 = mktime(gmtime(&time1));
long seconds_timezone_diff = time1 - time2;
hours_timezone_diff = seconds_timezone_diff / 3600.;
floor, ceil и random живут в библиотеке math. В winCC этом floor и ceil по дефолту доступны (как если бы библиотека math была подключена), но random отсутствует.da-nie писал(а):В моей Visual Studio 2010 я его тоже не нашёл.А round - отсутствует?