如何使用GCC编译具有文本属性的内联C函数?

如何使用GCC编译具有文本属性的内联C函数?,c,function,gcc,compiled,inline-functions,C,Function,Gcc,Compiled,Inline Functions,我有一个inline函数,如下所示: inline void func_1 (int a) { if(a==1) { other_func1(); } else { other_func2(); } } int main() { func1(1); func1(42); return 0; } 我主要是这样用的: inline void func_1 (int a) { if(a==1)

我有一个
inline
函数,如下所示:

inline void func_1 (int a)
{
   if(a==1)
   {
      other_func1();
   }
   else
   {
      other_func2();
   }
}
 int main()
 {
     func1(1);
     func1(42);

     return 0;
 }
我主要是这样用的:

inline void func_1 (int a)
{
   if(a==1)
   {
      other_func1();
   }
   else
   {
      other_func2();
   }
}
 int main()
 {
     func1(1);
     func1(42);

     return 0;
 }
我使用GCC,我认为编译后的代码是这样的(在“源代码级别”):


这是真的还是我错了?

是的,一般来说,当gcc可以在编译时计算分支时,它将优化内联函数中的死代码。我使用这个构造很多,允许为不同的用例生成优化代码——有点像C++中的模板实例化。

如果你不确定编译器是什么生成的,你可以总是使用<代码> -S < /C> >(也许是代码> -FVBBOSE ASM<代码>,以更好的可读性)并检查生成的程序集。对于不同的编译器选项和优化级别,结果可能不同。