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

gcc test.c -Wall -std=c18

函数“getpagesize”的隐式声明[-Wimplicit函数声明]
“getpagesize”[-ownested 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,包括提供getpagesize()的那些。从它的man page(假设您使用的是linux):
glibc的功能测试宏要求(参见功能测试宏(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)

10-08 03:48