Я записал программу, чтобы зондировать пределы C системы time.h функции и разгрузить их в JSON. Затем другие вещи, которые зависят от тех функций, могут знать свои пределы.
# system time.h limits, as JSON
{
"gmtime": { "max": 2147483647, "min": -2147483648 },
"localtime": { "max": 2147483647, "min": -2147483648 },
"mktime": {
"max": { "tm_sec": 7, "tm_min": 14, "tm_hour": 19, "tm_mday": 18, "tm_mon": 0, "tm_year": 138, "tm_wday": 1, "tm_yday": 17, "tm_isdst": 0 },
"min": { "tm_sec": 52, "tm_min": 45, "tm_hour": 12, "tm_mday": 13, "tm_mon": 11, "tm_year": 1, "tm_wday": 5, "tm_yday": 346, "tm_isdst": 0 }
}
}
gmtime () и localtime () достаточно просты, они просто берут числа, но mktime () берет структуру TM. Я записал пользовательскую функцию для превращения структуры TM в хеш JSON.
/* Dump a tm struct as a json fragment */
char * tm_as_json(const struct tm* date) {
char *date_json = malloc(sizeof(char) * 512);
#ifdef HAS_TM_TM_ZONE
char zone_json[32];
#endif
#ifdef HAS_TM_TM_GMTOFF
char gmtoff_json[32];
#endif
sprintf(date_json,
"\"tm_sec\": %d, \"tm_min\": %d, \"tm_hour\": %d, \"tm_mday\": %d, \"tm_mon\": %d, \"tm_year\": %d, \"tm_wday\": %d, \"tm_yday\": %d, \"tm_isdst\": %d",
date->tm_sec, date->tm_min, date->tm_hour, date->tm_mday,
date->tm_mon, date->tm_year, date->tm_wday, date->tm_yday, date->tm_isdst
);
#ifdef HAS_TM_TM_ZONE
sprintf(&zone_json, ", \"tm_zone\": %s", date->tm_zone);
strcat(date_json, zone_json);
#endif
#ifdef HAS_TM_TM_GMTOFF
sprintf(&gmtoff_json", \"tm_gmtoff\": %ld", date->tm_gmtoff);
strcat(date_json, gmtoff_json);
#endif
return date_json;
}
Существует ли способ сделать это в общем для какой-либо данной структуры?
Примечание: C, не C++.
Вот что у меня есть. Это не протестировано, но, надеюсь, будет менее гениально для вас работать с.: -)
double
roundd(double n, short mode)
{
short cw, newcw;
__asm__("fstcw %w0" : "=m" (cw));
newcw = cw & 0xf3ff | mode;
__asm__("fldcw %w0" : : "m" (newcw));
__asm__("frndint" : "+t" (n));
__asm__("fldcw %w0" : : "m" (cw));
return n;
}
Хотя, если вы не обязаны использовать сборку для достижения вашего режима округления, подумайте об использовании функций в < fenv.h >
вместо этого.: -)
Если вы используете ветвь с именем heroku в качестве «альтернативной главной» ветви (с конфиденциальными данными) и старую главную ветвь без конфиденциальных данных, то вы всегда можете сделать
git merge master
Так что вы можете протолкнуть ветвь heroku в heroku, а не главную ветвь.
-121--2414480-Не в C - по крайней мере, в целом. Но если модуль C скомпилирован с символами отладки, и объектный модуль доступен, можно проанализировать его и обнаружить все о структуре. Держу пари, что есть библиотека для вашей системы, чтобы помочь с этим.