fileno, F_LOCK и F_ULOCK становятся необъявленными и недоступными, когда я добавляю флаг std= c99 в gcc

StackOverflow https://stackoverflow.com/questions/1423185

  •  07-07-2019
  •  | 
  •  

Вопрос

У меня есть эти заголовки в 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top