J. *_*rez 2 c++ gcc compiler-optimization
是否可以使用GCC编译具有特定编译器标志的代码文件的一部分?例如,假设我有一些正在测试的功能。我希望这些功能严格遵守标准,因此我想使用--pedantic标志对其进行编译。但是进行测试的代码在编译时会发出很多警告。有没有办法用--pedantic编译那些特定功能?
另外,假设我有一个精心编写但非常昂贵的函数,需要尽快运行。如何使用-Ofast编译该函数(以及其他一些函数),并使用-O2或-O3编译程序的其余部分?
实际上,可以使用using #pragma optimize语句或using __attribute__((optimize("-O3")))所有的optimize选项在此处找到。
一个简单的例子是:
#include <stdio.h>
// Using attribute
__attribute__((optimize("-O3"))) void fast_function_attribute()
{
printf("Now calling a slow function, compiled with -O3 flags.\n");
}
__attribute__((optimize("-O1"))) void slow_function_attribute()
{
printf("Now calling a slow function, compiled with -O1 flags.\n");
}
// Using #pragma
#pragma GCC push_options
#pragma GCC optimize ("-O3")
void fast_function_pragma()
{
printf("This will be another fast routine.\n");
}
#pragma GCC pop_options
#pragma GCC push_options
#pragma GCC optimize ("-O1")
void slow_function_pragma()
{
printf("This will be another slow routine.\n");
}
#pragma GCC pop_options
int main(void)
{
fast_function_attribute();
slow_function_attribute();
fast_function_pragma();
slow_function_pragma();
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是不同的编译器,我强烈建议您使用宏将它们包装起来(或使用pragma语句),而不是__attribute__避免出现任何编译器警告。
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |