使用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
相关产品推荐
相关产品推荐

