在线C - IDE、编辑器、编译器、解释器

使用在浏览器中运行的真实Clang编译器在线编写、编译和运行C程序。支持stdin、警告提示和C标准库。

C17 (Clang 21, WebAssembly) · 在浏览器中运行,代码绝不会发送到我们的服务器。
main.cC
输出

            
输入(stdin),由 scanf / std::cin / getline 读取
Ctrl/⌘ + Enter 运行

在线 C 编译器的功能(IDE、编辑器 & 解释器)

免费在线编写、运行和测试 C 代码。本页面集在线 C IDE、代码编辑器、编译器和解释器于一体:输入代码,点击“运行”,立即查看输出。一切都在浏览器中运行,无需安装,也无需注册账号。

  • 即时运行代码: C17 (Clang 21, WebAssembly),首次加载后一秒内即可输出结果。
  • 代码编辑器: 语法高亮、行号、括号匹配和自动补全括号。
  • 程序输入(stdin): 在运行前输入程序要读取的内容。
  • 清晰的错误提示: 错误信息和警告会显示在输出面板中,与在您自己的电脑上一样。
  • 全屏: Ctrl/⌘ + Shift + F,可调节字号,支持并排或堆叠布局,面板大小可调。
  • 自动保存: 代码保存在您的浏览器中;可一键下载为 main.c 或复制。
  • 放心尝试: 时间限制和“停止”按钮可终止无限循环。
  • 私密: C 运行时在您的设备上运行,代码绝不会被上传。
  • 深色模式 以及键盘快捷键:Ctrl/⌘ + Enter 运行代码。
  • 免费: 无需注册,不限使用次数。

学习其他编程语言

如何使用 C 语言在线编译器

  1. 在编辑器中编写或粘贴一个 C 程序,其中要包含 main 函数。重置示例可恢复初始示例程序。
  2. 如果程序通过 scanf、getchar 或 fgets 读取输入,请在运行前把输入内容填入输出下方的输入(stdin)框。
  3. 点击运行或按 Ctrl + Enter(Mac 上为 ⌘ + Enter)。代码会先编译再执行,两个步骤的信息都会显示在输出面板中。
  4. 选择 5、15 或 60 秒的时间限制。死循环会在达到时限时被终止,点击停止可立即结束运行。

首次运行时会下载编译器,大约 30 MB。浏览器会将其缓存,之后一般的程序编译用时远不到一秒。用复制或 main.c 保存源文件,用 A− 和 A+ 调整文字大小,用布局按钮把编辑器和输出切换为左右并排或上下堆叠,需要更大空间时可使用全屏(Ctrl/⌘ + Shift + F,按 Esc 退出)。

编译和执行都在您的浏览器中完成,代码绝不会发送到服务器。编辑器只会把您最后的程序保存在浏览器的本地存储中,不会存放在其他任何地方。

工作原理与支持的功能

这是真正的编译器,而不是模仿 C 的解释器。页面运行的是 Clang/LLVM 21,它本身由 YoWASP 项目编译成了 WebAssembly。Clang 将 main.c 编译成 WebAssembly(WASI)程序,再由您的浏览器运行。编译参数如下:

clang main.c -std=c17 -O2 -Wall -lm -o main.wasm
  • C17 标准,开启优化(-O2)和常用警告(-Wall)。
  • 来自 wasi-libc 的 C 标准库:stdio.h、stdlib.h、string.h、ctype.h、stdint.h、time.h 等。数学库已链接,因此无需自己添加 -lm,就能使用 math.h 中的 sqrt、pow 和 sin。
  • 精确的诊断信息:错误和警告按 Clang 的原样输出,并带有 main.c:行:列 位置。
  • 退出码:如果 main 返回非 0 的值,输出末尾会显示 进程已退出,退出码 N。

浏览器沙箱的限制:

  • 不支持线程。无法使用 pthread.h。
  • 不支持套接字或网络访问,也不支持 fork 或 exec。
  • 没有真实的文件系统。无法打开您电脑上的文件,请改用 stdin 或在源代码中写入数据。
  • 不支持图形或 GUI 库,例如 SDL、OpenGL 或 conio.h/graphics.h。输出为纯文本。

编译器能帮您发现的常见 C 语言陷阱

检查 scanf 的返回值。它返回的是成功读取的值的个数,而不是值本身。如果 stdin 框为空,或者在需要数字的地方填了文字,变量会保留原来的值,可能是垃圾值。初始示例程序演示了安全的写法:

int n;
if (scanf("%d", &n) != 1) {
    fprintf(stderr, "expected a number\n");
    return 1;               /* reported as exit code 1 */
}

让 printf 的格式说明符与类型匹配。int 用 %d,long 用 %ld,long long 用 %lld,size_t 用 %zu,double 用 %f,字符用 %c。开启 -Wall 后,Clang 会对类型不匹配发出警告,例如用 %d 打印 double,所以即使程序能运行,也要看一看警告。

当心整数溢出。32 位 int 的上限是 2,147,483,647,而在 C 语言中有符号整数溢出属于未定义行为。使用 -O2 时,优化器可能假定溢出永远不会发生,因此溢出的循环可能表现异常,而不是简单地回绕。计算阶乘、大数求和与乘积时,请使用 long long(或 stdint.h 中的 int64_t)。

long long f = 1;
for (int i = 2; i <= 20; i++) f *= i;
printf("20! = %lld\n", f);   /* 2432902008176640000 */
提示:出现函数隐式声明(implicit declaration)的提示,通常意味着缺少 #include,例如 malloc 需要 stdlib.h,strlen 需要 string.h。

常见问题

这里使用哪种编译器和 C 标准?

Clang 21(LLVM),C17 模式,参数为 -O2 -Wall。只要遵循标准 C、不使用特定平台的头文件,大多数为 GCC 编写的代码无需修改即可编译。

我的代码会被上传吗?

不会。编译器本身就在您的浏览器中运行,因此源代码、编译后的程序及其输出都保留在您的设备上。

如何给程序提供输入?

在点击“运行”之前把输入填入 stdin 框。各个值可以用空格或换行分隔,就像在终端中输入一样。输入用完后,scanf 会返回 EOF。

为什么程序因时间限制而停止?

程序运行时间超过了所选的时限,这通常说明有一个永远不会结束的循环。请检查循环条件;如果确实是耗时较长的计算,请选择 60 s。

这里能编译 C++ 吗?

请使用 C++ 在线编译器,它在 C++20 模式下运行同样的 Clang。其他语言请查看全部在线编译器。

更新于

评论

暂无评分

登录后即可为此工具评分。

分享技巧、提出问题,或说说这个工具对您是否有用。

还没有评论,来分享您的使用体验吧。

已复制到剪贴板