如何使用 C 语言在线编译器
- 在编辑器中编写或粘贴一个 C 程序,其中要包含
main函数。重置示例可恢复初始示例程序。 - 如果程序通过
scanf、getchar或fgets读取输入,请在运行前把输入内容填入输出下方的输入(stdin)框。 - 点击运行或按 Ctrl + Enter(Mac 上为 ⌘ + Enter)。代码会先编译再执行,两个步骤的信息都会显示在输出面板中。
- 选择 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 */
#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。其他语言请查看全部在线编译器。
更新于
评论
登录后即可为此工具评分。
分享技巧、提出问题,或说说这个工具对您是否有用。
还没有评论,来分享您的使用体验吧。