함수 'execle'오류의 암시 적 선언

2015-07-10 c c99

나는 계속

함수 'execle'의 암시 적 선언이 C99에서 유효하지 않습니다.

아래 코드를 컴파일 할 때. 내가 무엇을 놓치고 있습니까?

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

char *my_env[] = {"JUICE=PEACH and apple", NULL};

int main (int argc, char *argv[])
{
  execle ("diner_info", "diner_info", "4", NULL, my_env);
  printf ("Diners: %s\n", argv[1]);
  printf ("Juice: %s\n", getenv("JUICE"));
  return 0;
}

Answers

C99 에서는 함수의 암시 적 선언이 허용되지 않습니다. 즉, 컴파일러는 해당 함수에 대한 호출을 만나기 전에 함수 서명을 알고 있어야합니다. 이는 두 가지 방법으로 달성 할 수 있습니다.

  1. 사용하기 전에 기능을 정의하십시오.
  2. 함수의 전방 선언을 제공하고 나중에 정의하십시오.

일반적으로 함수 서명은 헤더 파일을 통해 전달 선언으로 제공됩니다.

execle()맨 페이지 에 따라 앞으로 선언을 얻으려면 unistd.h 를 포함해야합니다.

암시 적 dec 경고를 해결하려면 unistd.h 를 포함해야합니다.

나는 그것을 작동시켰다. 그것이 밝혀진대로 진술이되어야하는 순서입니다. execle 이후의 것은 실행되지 않습니다.

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


  char *my_env[] = {"JUICE=PEACH and apple", NULL};
int main (int argc, char *argv[]) 
{
  printf ("Diners: %s\n", argv[1]);
  printf ("Juice: %s\n", getenv("JUICE"));
  execle ("diner_info", "diner_info", "4", NULL, my_env);
  return 0;
}

결과:

# :$ gcc diner_info.c -o diner_info && ./diner_info 
Diners: (null)
Juice: (null)
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple

그러나 나는 여전히 왜 상단에 null 값이 있는지 이해하지 못합니다.

나는 당신이 이것을 모두 잘못 알고 있다고 생각하며 다른 누군가 가이 문제에 직면 할 경우에 이것을 제출하고 있습니다. 나는 또한 헤드 퍼스트 c 책을 읽고이 섹션을 보았습니다. 두 개의 프로그램이 필요하다고 생각합니다. 하나는 "dinner_info"로 지정해야합니다.

//dinner_info.c

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


int main(int argc, char* argv[])
{
    printf("Dinners: %s\n", argv[1]);
    printf("Juice: %s\n",getenv("JUICE"));
    return 0;

}

다른 하나는 드라이버 프로그램이 execle 함수를 호출하므로 unistd.h 헤더를 포함해야하는 my_exec_program이라고 말해야합니다.

//my_exec_program
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>


int main (int argc, char* argv[])
{
    char * my_env[] = {"JUICE=peach and apple", NULL};
    execle("dinner_info", "dinner_info", "4" , NULL , my_env);
}

JUICE 환경 변수를 설정하는 방법에 특히주의하십시오. JUICE, 등호 및 복숭아 사이에 공백이 없어야합니다. 이 누락으로 인해 JUICE에 대해 계속 null 값을 얻었습니다.

그래서 여기서 일어나는 일은 다른 프로그램을 호출하는 프로그램을 호출하고 execle 함수를 사용하여 호출 된 프로그램에 환경 변수를 전달하는 것입니다.

Related