我不明白为什么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)
。