GCC可以使用attribute((optimize(“STRING”)))指定单个函数的优化级别,或者使用#pragma GCC optimize (“string”…)指定该语句之下的所有函数的优化级别。
有些时候会希望某个函数或者某几个函数和其他的函数采取不同的优化级别,比如为了调试方便,或者为了避免编译乱序。这时候可以使用GCC的两个特性来完成。attribute((optimize(“STRING”)))可以指定单个函数的优化级别,如果有多个函数要指定的话,可以重复使用attribute((optimize(“STRING”))),或者使用#pragma GCC optimize (“string”…),#pragma GCC optimize (“string”…)语句下部的所有函数将使用该语句指定的优化级别。
attribute((optimize(“STRING”)))的例子,add函数使用O0优化级别,sub函数使用O2优化级别。
// 首先用__attribute__声明函数
int add(int a, int b) __attribute__((optimize("O0")));
// 然后再定义函数,声明和定义必须分开,否则编译错误
int add(int a, int b)
{
}
int sub(int a, int b) __attribute__((optimize("O2")));
int sub(int a, int b)
{
}
pragma GCC optimize (“string”…)的例子,pragma语句下面的add和sub函数都使用O3优化级别。pragma语句上面的div函数使用命令行指定的优化级别。
int div(int a, int b)
{
}
#pragma GCC optimize ("O3")
int add(int a, int b)
{
}
int sub(int a, int b)
{
}