Is it possible to use GCC to compile one section of a code file with specific compiler flags?(可以使用GCC来编译带有特定编译器标志的代码文件的一段吗?)
问题描述
可以使用GCC编译带有特定编译器标志的代码文件的一段吗?例如,假设我有一些正在测试的函数。我希望这些函数严格遵守标准,所以我想用--Pedtic标志来编译它们。但是,执行测试的代码在编译时会发出很多警告。有没有办法只编译那些特定的函数,用--Pedtic?
或者,假设我有一个精心编写但极其昂贵的函数,它需要尽可能快地运行。如何才能只用-Ofast编译该函数(以及其他几个函数),而用-O2或-03编译程序的其余部分?
推荐答案
实际上有使用#pragma optimize
语句,或使用__attribute__((optimize("-O3")))
所有优化选项都可以找到here。
一个简单的例子是:
#include <stdio.h>
// Using attribute
__attribute__((optimize("-O3"))) void fast_function_attribute()
{
printf("Now calling a slow function, compiled with -O3 flags.
");
}
__attribute__((optimize("-O1"))) void slow_function_attribute()
{
printf("Now calling a slow function, compiled with -O1 flags.
");
}
// Using #pragma
#pragma GCC push_options
#pragma GCC optimize ("-O3")
void fast_function_pragma()
{
printf("This will be another fast routine.
");
}
#pragma GCC pop_options
#pragma GCC push_options
#pragma GCC optimize ("-O1")
void slow_function_pragma()
{
printf("This will be another slow routine.
");
}
#pragma GCC pop_options
int main(void)
{
fast_function_attribute();
slow_function_attribute();
fast_function_pragma();
slow_function_pragma();
}
如果您使用的是不同的编译器,我强烈建议您使用宏来包装它们(或者使用杂注语句而不是__attribute__
以避免任何编译器警告。
这篇关于可以使用GCC来编译带有特定编译器标志的代码文件的一段吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:可以使用GCC来编译带有特定编译器标志的代码文件的一段吗?


基础教程推荐
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- C++,'if' 表达式中的变量声明 2021-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01