You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GCC编译C程序时chrono致命错误的解决方法

解决.c后缀文件使用C++ chrono库的编译问题

这问题我之前帮同学排查过,核心原因很简单:GCC默认会把.c后缀的文件当作C语言源文件处理,而<chrono>是C++标准库独有的头文件,C语言里根本不存在这个东西,所以编译时才会报「chrono: No such file or directory」的错误。

给你两个直接可行的解决方案,都能满足教授要求的.c后缀要求:

方案一:强制GCC按C++规则编译.c文件

用-x c++参数告诉编译器,不管文件后缀是什么,都把它当作C代码处理,再配合指定C标准版本的参数(比如-std=c++11),编译命令如下:

gcc -x c++ -std=c++11 prog.c -o prog

执行这个命令后,编译器就会正确识别<chrono>头文件,不会再报错。

方案二:直接用g++编译

g是GCC的C前端工具,它默认会把所有输入文件当作C++代码处理,不管后缀是.c还是.cpp/.cc,所以用它编译也能解决问题:

g++ -std=c++11 prog.c -o prog

附一个完整的毫秒级计时示例代码

你可以把这段代码放到prog.c里测试:

#include <chrono>
#include <iostream>

// 模拟你要计时的函数
void your_function() {
    // 这里替换成你的实际业务代码
    for (long long i = 0; i < 500000000; ++i) {}
}

int main() {
    // 记录开始时间
    auto start = std::chrono::high_resolution_clock::now();
    
    // 执行要计时的函数
    your_function();
    
    // 记录结束时间
    auto end = std::chrono::high_resolution_clock::now();
    
    // 计算耗时并转换为毫秒
    std::chrono::duration<double, std::milli> elapsed_time = end - start;
    
    std::cout << "函数运行耗时:" << elapsed_time.count() << " 毫秒" << std::endl;
    
    return 0;
}

用上面的任意一个编译命令生成可执行文件后,运行就能看到函数的毫秒级运行时间了。

之前你把后缀改成.cc能编译成功,是因为GCC默认会把.cc、.cpp这类后缀识别为C文件,自动用C规则编译,只是教授要求用.c后缀,所以必须用上面的强制编译方式啦。

内容的提问来源于stack exchange,提问作者Rosie13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:19:52