[英]implicit declaration using -std=c99
我收到此警告:( -std=c99 -pedantic
)
warning: implicit declaration of function ‘strndup’ [-Wimplicit-function-declaration]
但我正在導入這些庫:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
所以呢?! :(
// file.c:
#include "file.h"
strndup(...)
// file.h:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
問題在於您使用了-std=c99
選項。 由於strndup()
不是C99 的一部分,並且您要求編譯器進入標准兼容模式,因此它不會為其提供原型。 當然它仍然鏈接,因為你的 C 庫有它。
雖然您可以通過自己指定功能宏來哄gcc
提供它,但我認為處於 C99 合規模式並要求 GNU 擴展沒有多大意義。 gcc
已經為此提供了一種模式,它將解決您的警告: -std=gnu99
。
我的man strndup
說
Feature Test Macro Requirements for glibc (see feature_test_macros(7)): strdup(): _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED || /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L strndup(): Since glibc 2.10: POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700 Before glibc 2.10: _GNU_SOURCE strdupa(), strndupa(): _GNU_SOURCE
所以我需要,例如,在第一個#include
之前#define POSIX_C_SOURCE 200809L
。
參見man 7 feature_test_macros
strndup
是 GNU 擴展,因此您需要在命令行上使用-D_GNU_SOURCE
進行編譯,或者在源文件中的#include
行之前添加#define _GNU_SOURCE 1
這發生在我身上,我添加了#define _XOPEN_SOURCE 500
並且警告消失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.