std18 getpagesize: неявное объявление функции + вложенное внешнее объявление - PullRequest
0 голосов
/ 26 февраля 2019

Я не понимаю, почему функция getpagesize выдает мне предупреждение о неявном объявлении функции при использовании g18-версии c18.

gcc test.c -Wall -std=c18

неявное объявление функции 'getpagesize' [-Wimplicit-function-declaration]

вложенное внешнее объявление 'getpagesize' [-Wnested-externs]

  int BLOCKSIZE = getpagesize();

И это мои включенные файлы:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <stdint.h>
#include <errno.h>

1 Ответ

0 голосов
/ 26 февраля 2019

Использование -std=cXX вместо -std=gnuXX отключает набор обычно определенных макросов тестирования функций , включая те, которые предоставляют getpagesize().Со страницы man (при условии, что вы используете linux):

Требования к макрокоманде тестирования возможностей для glibc (см. Feature_test_macros (7)):

  getpagesize():
       Since glibc 2.19:
           _DEFAULT_SOURCE || ! (_POSIX_C_SOURCE >= 200112L)
       From glibc 2.12 to 2.19:
           _BSD_SOURCE || ! (_POSIX_C_SOURCE >= 200112L)
       Before glibc 2.12:
           _BSD_SOURCE || _XOPEN_SOURCE >= 500

Таким образом, вы должны определить соответствующий для соответствующего значения перед , включая любые заголовочные файлы.Или просто используйте -std=gnu18.

Редактировать: Кроме того, поскольку getpagesize() устарел и не является стандартным, рассмотрите возможность использования вместо него стандарта POSIX sysconf(_SC_PAGESIZE).

...