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