2013-05-31 36 views
6

Tôi đã thử biên dịch đoạn mã sau với gcc 4.7.3clang 3.2.1 trên Ubuntu 13.04 (64-bit):stdlib.h không có tuyên bố cho putenv

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

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

    return 0; 
} 

tôi mong đợi putenv được khai báo trong stdlib.h tiêu đề, nhưng tôi nhận được cảnh báo sau:

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

Tại sao tuyên bố cho hàm này bị thiếu trong tiêu đề?

Trả lời

8

Bạn phải xác định các macro nhất định. Nhìn vào 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 

Cố gắng xác định một trong hai _SVID_SOURCE hoặc _XOPEN_SOURCE trước bao gồm stdlib.h, như vậy:

#define _XOPEN_SOURCE 
#include <stdlib.h> 

Hoặc khi biên dịch (với -D), như:

gcc -o output file.c -D_XOPEN_SOURCE