首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C11语言方言在Xcode C文件中编译?

如何用C11语言方言在Xcode C文件中编译?
EN

Stack Overflow用户
提问于 2016-10-27 08:50:26
回答 1查看 777关注 0票数 1

我想编译这个源代码:

代码语言:javascript
复制
#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 (int) attribute((noreturn))‘”类型隐式声明库函数“exit”
  • 函数“等待”的隐式声明在C99中无效
  • 函数调用(预期为1 )的参数太少,有0

项目设置:

系统:

ProductName: Mac : 10.12.1 BuildVersion: 16B2555

Xcode版本8.0 (8A218a)

Apple版本8.0.0 (clang-800.0.38)目标: x86_64-apple-darwin16.1.0线程模型: posix

EN

回答 1

Stack Overflow用户

发布于 2016-10-27 13:17:46

有几个问题:

  1. Xcode没有看到函数定义,这就是为什么它说‘函数的隐式声明'foobar’在C99中无效‘。尽管如此,Xcode仍然试图编译您的代码,前提是未知函数将在链接阶段得到解决。对于exitwait,它可以工作,但是要抑制警告,只需要包含stdlib:#include <stdlib.h>。对于gets_s,您需要做一些额外的操作才能工作(我不知道它是从哪里来的)。
  2. 第二个问题是,wait函数的签名如下所示:int wait(int *),而不给它任何参数。如果不需要从子进程获取退出代码,只需添加0NULL即可。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40280174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档