可以使用GCC来编译带有特定编译器标志的代码文件的一段吗? [英] Is it possible to use GCC to compile one section of a code file with specific compiler flags?

查看:108
本文介绍了可以使用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来编译带有特定编译器标志的代码文件的一段吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆