#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
进行编译。
这给出了这个警告:
初始化使得指针来自整数而没有强制转换
任何人都可以解释这个警告以及如何正确避免它吗?
答案 0 :(得分:3)
您必须在所有包括之前放置功能测试宏。在您的情况下,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;
}