group-telegram.com/gepardchan/137
Last Update:
Ответ такой: код не скомпилируется. Даже несмотря на то, что он выглядит довольно безобидно, и явно никаких ошибок не видно.
Разгадка, как правильно указали в комментариях, заключается в следующем.
Где-то в недрах системных заголовков есть struct stat
(здесь он прилетает через #include <sys/fcntl.h>
) — структура с метаданными файла, которая используется в системном вызове stat
. Изначально времена доступа к файлам хранились в этой структуре в полях st_mtime
, st_atime
, st_ctime
в виде UNIX таймстемпа с точностью до секунды. Затем точность повысили до наносекунд и стали использовать struct timespec
для задания времени (поля st_atim
, st_ctim
, st_mtim
). А чтобы не ломать обратную совместимость для тех программ, которые про наносекундную точность ничего не знают, вставили вот такой вот костыль:
#define st_atime st_atim.tv_sec /* Backward compatibility */
#define st_mtime st_mtim.tv_sec
#define st_ctime st_ctim.tv_sec
И теперь выходит, что объявление переменной
st_mtime
дает ошибку, поскольку уже объявлен макрос ровно с таким же именем, и препроцессор раскрывает st_mtime
в st_mtim.tv_sec
BY Гепардово гнездо
Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260
Share with your friend now:
group-telegram.com/gepardchan/137