2016-10-27 8 views
0

나는이 소스 코드를 컴파일 할 :C11 언어 방언으로 Xcode C 파일을 컴파일하는 방법은 무엇입니까?

#include <stdio.h> 
#include <unistd.h> 
#include <fcntl.h> 
#include <string.h> 

int main(int argc, const char *argv[]) { 
While: 

    printf("MacBook-Pro-...:~ ...$ "); 

    char command[128]; 
    gets_s(command); 

    if (strncmp(command, "exit", 4) == 0) 
    exit(0); 

    pid_t return_value = fork(); 

    if (return_value == 0) { 
    int outfile; 
    if ((outfile = dup(1)) == -1) 
     return -1; 

    close(1); 

    if ((outfile = open("/Users/.../1.txt", 
         O_WRONLY | O_TRUNC | O_CREAT, 0644)) >= 0) { 
     execl("/bin/sh", "sh", "-c", command, NULL); 
    } 

    close(outfile); 
    exit(0); 
    } else { 
    wait(); 


    FILE *fp; 
    char str[128]; 
    fp = fopen("/Users/.../1.txt", "r"); 

    while(!feof(fp)) { 
     if(fgets(str, 126, fp)) 
     printf("%s", str); 
    } 

    fclose(fp); 
    goto While; 
    } 

    return 0; 
} 

을하지만 난 약간의 오차가 있습니다 시맨틱 문제 기능 'gets_s'의

  • 암시 적 선언 C99
  • 암시 적으로 선언하는 라이브러리 함수에 유효하지 않습니다 'void'형식의 'exit'속성 (noreturn) '
  • 'wait '함수의 암시 적 선언이 C99에서 유효하지 않습니다. 함수 호출에
  • 너무 소수의 인수는, (1) 예상이 0

Project settings:

시스템 :

제품 이름 : 맥 OS X PRODUCTVERSION : 10.12.1 BuildVersion : 16B2555

Xcode 버전 8.0 (8A218a)

애플 LLVM 버전 8.0.0 (그 소리-800.0.38) 대상 : x86_64에-사과 darwin16.1.0 스레드 모델 : POSIX

답변

0

몇 가지 문제가 있습니다

  1. 엑스 코드는 함수 정의가 표시되지 않습니다 그래서 'C99에서는'foobar '함수의 암시 적 선언이 유효하지 않습니다.' 그럼에도 불구하고 Xcode는 링크 단계 중에 알려지지 않은 함수가 해결 될 것이라고 가정하고 코드를 컴파일하려고 시도합니다. exitwait의 경우에는 작동하지만 경고를 표시하지 않으려면 stdlib : #include <stdlib.h>을 포함하면됩니다. gets_s 현재 작동하게하려면 몇 가지 추가 작업을 수행해야합니다 (나는 어디서 왔는지 모릅니다).

  2. 두 번째 문제는 wait 함수의 서명이 int wait(int *) 인 것처럼 보이지만 매개 변수를 지정하지 않는 것입니다. 하위 프로세스에서 종료 코드를 다시 가져올 필요가없는 경우 0 또는 NULL을 간단히 추가하십시오.