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