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

时间:2019-02-26 13:40:27

标签: c unix gcc-warning

我不明白为什么函数getpagesize在使用c18版本的gcc时会提示我隐式声明函数。

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 :(得分:3)

使用-std=cXX代替-std=gnuXX会禁用一堆通常定义的feature test macros,包括提供getpagesize()的那些。在其man page中(假设您使用的是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)