fileno, F_LOCK и F_ULOCK становятся необъявленными и недоступными, когда я добавляю флаг std= c99 в gcc
Вопрос
У меня есть эти заголовки в c-коде
#include <stdio.h>
#include <unistd.h>
Все компилировалось нормально, пока я не добавил флаг -std=c99 в команду gcc (чтобы включить ограничивать).И это вызвало следующие ошибки.
предупреждение:неявное объявление функции
fileno
ошибка:
F_LOCK
необъявленный (впервые используется в этой функции)
ошибка:(О каждом необъявленном идентификаторе сообщается только один раз ошибка:для каждой функции, в которой она появляется.)
ошибка:F_ULOCK
необъявленный (впервые используется в этой функции
Есть идеи по обходу этих ошибок / предупреждений?
Решение
Вам нужно сообщить заголовкам, что вы хотите расширения POSIX. В эти дни я использую:
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */
Если я компилирую с -std = c89
, это дает правильную версию POSIX; если вы скомпилируете с -std = c89
, это даст правильную версию POSIX. Я использую это в Solaris 9 и 10, MacOS X (10.4.x, 10.5.x), HP-UX 11.x, Linux (RHEL4 и 5, SuSE 9 и 10) и AIX 5.x и 6.x - AFAICR пока без проблем.
Этот раздел должен появиться до того, как будут включены какие-либо системные заголовки (в вашем собственном заголовке или в каждом исходном файле), или вам нужно добиться того же эффекта с помощью -D_XOPEN_SOURCE = 600
в команде компилятора линия, или какой-то другой подобный механизм.
Другие советы
Попробуй
-std=gnu99
включить все расширения и по-прежнему использовать усовершенствования языка C99.
Вы можете попробовать -D_BSD_SOURCE, чтобы включить BSD-isms или -D_SVID_SOURCE, чтобы включить System-V isms