解决macOS上的TCC警告

解决macOS上的TCC警告,c,interpreter,tcc,C,Interpreter,Tcc,我正在寻找一个C解释器来使用,同时制作一个简单的C实用程序来避免一直编译。我按照建议安装了TCC,但收到警告和错误。如何正确运行TCC $ tcc -run hello.c .../usr/include/sys/cdefs.h:81: warning: #warning "Unsupported compiler detected" #if !defined(__GNUC__) || __GNUC__ < 4 #warning "Unsupported compiler detected

我正在寻找一个C解释器来使用,同时制作一个简单的C实用程序来避免一直编译。我按照建议安装了TCC,但收到警告和错误。如何正确运行TCC

$ tcc -run hello.c
.../usr/include/sys/cdefs.h:81: warning: #warning "Unsupported compiler detected"
#if !defined(__GNUC__) || __GNUC__ < 4
#warning "Unsupported compiler detected"
#endif
我的环境:

~$ gcc --version
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0

如果TCC不适合macOS,请建议一个运行良好的C解释器。

可以肯定的是,CERN或其他基于LLVM/Clang的解释器,因为这是苹果在macOS中使用的解释器。

在您第一条消息所抱怨的行上方的块注释是

/* This SDK is designed to work with clang and specific versions of
 * gcc >= 4.0 with Apple's patch sets */
#if !defined(__GNUC__) || __GNUC__ < 4
#warning "Unsupported compiler detected"
#endif
/*此SDK设计用于clang和特定版本的
*gcc>=4.0,带有苹果的补丁集*/
#如果!已定义(uuu GNUC_uuuu)| | uuu GNUC_uu4
#警告“检测到不支持的编译器”
#恩迪夫
这是非常清楚的-您确实需要gcc或clang。幸运的是,这两个编译器都非常易于安装和使用


我不会为C解释器而烦恼——它不是一种解释语言。

首先,
tcc
不是一种“解释器”,它是一种非常快速的编译器,可以用来编译和运行C代码,就像它是脚本一样

第二,“检测到不支持的编译器”警告只是一个警告。我一直收到警告,我的代码编译和运行都没有问题。如果警告困扰您,您可以简单地使用
-w
选项运行
tcc
,以抑制警告(可能仅当您正在运行一个已知没有问题的文件时才建议使用)

例如,如果您正在运行C代码,就像它是一个使用
tcc
shebang行的脚本一样,您可以将其更改为

#!/usr/local/bin/tcc -w -run
在macOS上运行
tcc
时,可能会出现一些其他问题。主文件缺少包含文件。在macOS上,可能无法将包含文件安装到
/usr/include/
。查看此项以了解修复方法。一旦Xcode正确安装了头文件,我仍然需要更新我的环境变量以获得
tcc
来找到它们

 export C_INCLUDE_PATH="/usr/include:$C_INCLUDE_PATH"

您可以通过运行
tcc-vv

查看
tcc
在哪里查找头文件为什么自制的编译器不能工作?无论如何,这里有一个bug问题:MacOS附带了GCC/clang开箱即用(更新了原始帖子)。TCC的一个缺点是它不能自动获取这个信息吗?Clang、gcc和TCC都是不同的编译器。问题是tcc试图使用与操作系统捆绑在一起的标准库,这与tcc不兼容。实际上,通过使用
-run
my(simple)C代码可以解释,所以我可以删除警告,看看我得到了多少。@forthrin显然你不知道编译和解释之间的区别。TCC这个名字来源于。它是编译器,不是解释器。
-run
命令行选项告诉它启动编译后的程序执行(如果编译成功)。我明白了!我确实知道其中的区别,但很明显,我误读了引用的文章,这篇文章似乎把它说成是一名译员。好吧,如果没有(轻量级!)“C解释器”这样的东西,那么我还是继续使用GCC吧。大量的下载,压倒性的
——帮助和非常技术性的文档。不容易进入…@forthrin:如果你需要一个基于LLVM/Clang的最小解决方案,你也可以创建自己的微型解释器:不过,我猜你更喜欢现成的解释器,这就是为什么我建议使用Cling。
 export C_INCLUDE_PATH="/usr/include:$C_INCLUDE_PATH"