Форум Кургана и Курганской области и наших друзей

Зима. Форум Кургана и Курганской области и наших друзей
24 Октябрь 2020, 17:38:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: C# Mono  (Прочитано 1017 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Андрюшка
Корабельный секретарь
***

Карма: -6
Offline Offline

Пол: Мужской
Сообщений: 163


Россия навсегда!


Награды
« : 30 Июнь 2014, 18:48:59 »

Кто пробовал писать под Linux на C#? Наткнулся на баг, а может фитчу:

Код:
...
int s = 100;
var delay = TimeSpan.FromHours(s); // delay=45 секунд  :o
...

Никто с таким не сталкивался?
« Последнее редактирование: 30 Июнь 2014, 18:52:16 от Андрюшка » Записан
sharpey
BSD'ун
Титулярный советник
*****

Карма: 126
Offline Offline

Пол: Мужской
Сообщений: 686



Награды
« Ответ #1 : 12 Июль 2014, 10:17:23 »

Про приведение типов (casting) что-нибудь известно? )
В прототипе функции TimeSpan.FromHours тип параметра указан как Double (вещественный двойной точности), а Вы ему подсовываете int (целый). Отсюда и "глюки", непредвиденное поведение. Компилятор ругался на тип int или предупреждал о нём?
Крайне желательно выставляте уровень предупреждений на максимальное значение (для gcc это опция -Wall, для компилятора VC# я не в курсе).
Записан
sharpey
BSD'ун
Титулярный советник
*****

Карма: 126
Offline Offline

Пол: Мужской
Сообщений: 686



Награды
« Ответ #2 : 13 Июль 2014, 12:26:23 »

Вот набросал пример на Си:
Код:
#include <stdio.h>

int main(int argc, char **argv)
{
  void *ptr;  
  long long int s = 100;
  ptr = &s;
  printf("Integer value pointed by ptr is: %d\n", *(int *)ptr);
  printf("Float value pointed by ptr is: %f\n", *(double *)ptr);
  printf("Size of type long long int is: %d bytes\n", sizeof(s));
  printf("Size of type double is: %d bytes\n", sizeof(double));  
  return 0;
}
Собрался пример компилятором gcc (mingw32) командой

gcc -s -Os -Wall -o mono.exe main.c

На выходе получилось:

Integer value pointed by ptr is: 100
Float value pointed by ptr is: 0.000000
Size of type long long int is: 8 bytes
Size of type double is: 8 bytes


Как видно из примера, указатель на данные не изменился (переменная s), изменилась только интерпретация содержимого этой ячейки. Размер переменной s я увеличил до типа long long int (64 бита), чтобы размерность целого соответствовало размерности double (также 64 бита).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC
rss | wap
Valid XHTML 1.0! Valid CSS!