Скажем, например, что я хочу использовать структуру timespec
, которая определена в time.h. В соответствии с man-страницами мне нужно только указать time.h. Но при компиляции в c99 этого недостаточно:
#include <stdio.h>
#include <time.h>
struct timespec abcd;
int main(int argc, char *argv[])
{
return 0;
}
В соответствии с информацией, которую я нахожу в Интернете (не на страницах руководства), мне нужно добавить следующее:
#define _POSIX_C_SOURCE 200809L
Итак, у меня есть несколько вопросов:
Как узнать, какому значению _POSIX_C_SOURCE нужно быть равным? Я нашел несколько значений в Интернете.
Почему размещение этого определения влияет на компиляцию? (ср. ниже)
#include <stdio.h>
#define _POSIX_C_SOURCE 200809L
#include <time.h>
struct timespec abcd;
int main(int argc, char *argv[])
{
return 0;
}
$ gcc test.c -Wall -Wpedantic -std=c99 -o test
test.c:9:25: error: field ‘time_last_package’ has incomplete type
struct timespec time_last_package;
хорошо компилируется:
#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <time.h>
....
Спасибо