std18 getpagesize :函数的隐式声明 + 嵌套的外部声明

std18 getpagesize : implicit declaration of function + nested extern declaration

我不明白为什么在使用 gcc 的 c18 版本时函数 getpagesize 会给我一个函数隐式声明的警告。

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>

使用 -std=cXX 而不是 -std=gnuXX 会禁用一堆通常定义的 feature test macros, including the ones that provide getpagesize(). From its man page (假设您使用的是 linux):

Feature Test Macro Requirements for glibc (see 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)