programing

char *envp [ ]는 main() portable의 세 번째 인수입니까?

newsource 2022. 8. 21. 19:43

char *envp [ ]는 main() portable의 세 번째 인수입니까?

환경변수를 가져오려면C프로그램, 다음을 사용할 수 있습니다.

  • getenv()
  • extern char **environ;

그러나 위에서 언급한 것 외에, 는char *envp[]에 대한 제3의 논거로서main()환경변수를 표준의 일부로 간주할 수 있습니까?

#include <stdio.h>

int main(int argc, char *argv[], char *envp[])
{
    while(*envp)
        printf("%s\n",*envp++);
}

char *envp[]휴대할 수 있습니까?

함수getenvC 표준으로 지정되어 있는 것은 이것뿐입니다.함수 및 extern은 POSIX 고유합니다.

편집

main파라미터envp는 POSIX에 의해 지정되어 있지 않지만 광범위하게 지원됩니다.

환경 목록에 액세스하는 다른 방법은 main() 함수에 세 번째 인수를 선언하는 것입니다.

int main(int argc, char *argv[], char *envp[])

이 인수는 환경과 같은 방법으로 취급할 수 있습니다.단, 이 인수의 스코프는 main()에 대해 로컬입니다.이 기능은 UNIX 시스템에 널리 구현되어 있지만 범위 제한과 더불어 SUSv3에 지정되어 있지 않기 때문에 사용을 피해야 합니다.

그것은 휴대할 수 없다. *envp[]는 기존의 UNIX 방식이며, 모든 최신 UNIX 시스템에서 구현되는 것은 아닙니다.

또, 사이드 노트로서 envp 에 액세스 할 수 있습니다.*argv[]넘치고...하지만 안전한 프로그래밍이라고 볼 수는 없을 것 같아요프로세스 메모리 맵을 보면envp[]바로 위에 있다argv[].

이 기준서는 다음의 두 가지 형식을 기술한다.main(C99 Standard(pdf)의 5.1.2.1 참조)

a)int main(void)

그리고.

b)int main(int argc, char **argv)또는 동등한 것

또, 실장에서는 다른 포맷을 정의할 수 있습니다(3번째 인수를 사용할 수 있습니다).

c) 또는 기타 구현 정의 방법.

세 번째 인수는 Microsoft C 및 GNU GCC에서 유효합니다.

Visual Studio 2015: 주요 쟁점

GNU C 프로그래밍 튜토리얼:환경 변수

언급URL : https://stackoverflow.com/questions/10321435/is-char-envp-as-a-third-argument-to-main-portable