سؤال

هل هذا الرمز:

inline int funcA(int a) __attribute__((always_inline))
{
    return a + 1;
}
inline int funcB(int b) __attribute__((always_inline))
{
    return funcA(b + 2);
}
int main()
{
    return funcB(3);
}

تحولت إلى رمز مثل هذا؟:

int main()
{
   return ((3) + 2) + 1;
}

GCC ، ARM (iPhone)

هل كانت مفيدة؟

المحلول

مكالمات الوظائف اللاصقة ليس شيئًا تتطلب اللغة المترجمين. إنها جودة قضية التنفيذ (QOI). ولكن أي من GCC و MSVC و Clang سيفعل ذلك. بالطبع ، عليك تمكين التحسين.

على سبيل المثال

# clang++ -cc1 -emit-llvm -O2 -o - main.cpp
define i32 @main() nounwind readnone {
entry:
  ret i32 6
}

نصائح أخرى

لا توجد ضمانات عند استخدامها inline. إنه بمثابة مجرد تلميح للمترجم (الذي في العديد من الحالات (وليس كل) لديهم المزيد من الاستدلال وفهم أفضل لتأثير الإطار أكثر من المبرمج).

ليس بالضرورة. يعتمد على المترجم والإعدادات على ما أعتقد. في الواقع في C ++ ، على سبيل المثال ، لا يضمن ذلك حتى

inline int funcA(int a)
{
    return a + 1;
}
int main()
{
    return funcA(3);
}

سوف يتحول إلى هذا

int main()
{
    return 3 + 1;
}

مضمّن هو مجرد تلميح للمترجم. المترجم يمكن أن يتجاهله.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top