Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi C Disarang, dan Bagaimanakah Ini Berevolusi Merentas Piawaian Berbeza?

Bolehkah Fungsi C Disarang, dan Bagaimanakah Ini Berevolusi Merentas Piawaian Berbeza?

DDD
DDDasal
2024-12-20 08:27:10460semak imbas

Can C   Functions Be Nested, and How Has This Evolved Across Different Standards?

Fungsi Bersarang dalam C

Dalam konteks C , persoalan timbul sama ada fungsi boleh ditakrifkan dalam fungsi lain.

C Moden

Dalam C 11 dan versi yang lebih baru (C 14, C 17), fungsi bersarang boleh dilakukan melalui penggunaan ungkapan lambda. Lambdas boleh ditakrifkan dalam fungsi dan berkelakuan seperti fungsi tanpa nama:

int main() {
  auto print_message = [](std::string message) {
    std::cout << message << "\n";
  };

  for (int i = 0; i < 10; i++) {
    print_message("Hello!");
  }

  return 0;
}

C 98 dan C 03

Dalam C 98 dan C 03, fungsi bersarang tidak secara langsung disokong. Walau bagaimanapun, kesan yang sama boleh dicapai melalui penggunaan kelas tempatan dengan fungsi ahli statik:

int main() {
  struct X {
    static void a() {}
  };

  X::a();

  return 0;
}

Walaupun pendekatan ini memberikan persamaan fungsi bersarang, ia tidak semudah menggunakan lambda dalam C moden.

Atas ialah kandungan terperinci Bolehkah Fungsi C Disarang, dan Bagaimanakah Ini Berevolusi Merentas Piawaian Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn