#include <stdio.h>
#define _XOPEN_SOURCE
#include <unistd.h>
int main()
{
const char *key = NULL;
const char *salt = NULL;
crypt(key, salt);
return 0;
}
使用 gcc test.c -o test -Wall -lcrypt
编译。
给出如下警告:
初始化使指针从没有强制转换的整数变成
谁能解释一下这个警告以及如何正确地避免它?
您必须将功能测试宏放在所有 include之前。在您的情况下,stdio.h
已经在幕后包括features.h
,它负责将功能定义(如_XOPEN_SOURCE
)转换为头文件使用的内部内容。因此,当您包含unistd.h
时,标志已经设置,不会再次解释,因此,同时声明_XOPEN_SOURCE
不会有任何影响。
改变顺序解决问题:
#define _XOPEN_SOURCE
#include <stdio.h>
#include <unistd.h>
int main()
{
const char *key = NULL;
const char *salt = NULL;
crypt(key, salt);
return 0;
}