Reputation: 49
#include <stdio.h>
#define _XOPEN_SOURCE
#include <unistd.h>
int main()
{
const char *key = NULL;
const char *salt = NULL;
crypt(key, salt);
return 0;
}
use gcc test.c -o test -Wall -lcrypt
to compile.
Which gives this warning:
initialization makes pointer from integer without a cast
Can anyone explain this warning and how to properly avoid it?
Upvotes: 1
Views: 497
Reputation: 20708
You have to put feature test macros before all includes. In your case, stdio.h
already includes features.h
behind the scenes, which takes care of converting the feature defines (like _XOPEN_SOURCE
) into something internal the headers use. So when you include unistd.h
, the flags have already been set and won’t be interpreted again, thus, declaring _XOPEN_SOURCE
in the mean time won’t have any effect.
Changing the order fixes the problem:
#define _XOPEN_SOURCE
#include <stdio.h>
#include <unistd.h>
int main()
{
const char *key = NULL;
const char *salt = NULL;
crypt(key, salt);
return 0;
}
Upvotes: 3