stdlib.h не имеет декларации для putenv

Я попытался скомпилировать следующий код с помощью gcc 4.7.3 и clang 3.2.1 на Ubuntu 13.04 (64-бит):

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main() {
    putenv("SDL_VIDEO_CENTERED=1");

    return 0;
}

Я ожидал putenv быть объявленным в stdlib.h заголовок, но я получаю следующее предупреждение:

test.c: In function ‘main’:
test.c:6:5: warning: implicit declaration of function ‘putenv’ [-Wimplicit-function-declaration]

почему объявление для этой функции отсутствует в моем заголовке?

1 ответов


вы должны определить некоторые макросы. Посмотреть man 3 putenv:

NAME
  putenv - change or add an environment variable

SYNOPSIS
   #include <stdlib.h>

   int putenv(char *string);

Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

   putenv(): _SVID_SOURCE || _XOPEN_SOURCE

попробуйте определить либо _SVID_SOURCE или _XOPEN_SOURCE перед stdlib.h, например:

#define _XOPEN_SOURCE
#include <stdlib.h>

или при компиляции (с -D), как:

gcc -o output file.c -D_XOPEN_SOURCE