--- id: c-functions-callback title: "C Callback Functions" category: "Programming_Language" status: "draft" verification_status: "conceptual" canonical_id: "" aliases: ["callback pattern", "qsort callback", "C 콜백 ν•¨μˆ˜"] duplicate_of: "" source_trust_level: "B" confidence_score: 0.87 created_at: 2026-07-04 updated_at: 2026-07-04 review_reason: "" merge_history: [] tags: ["c", "programming-language", "w3schools", "functions", "callbacks", "qsort"] raw_sources: ["https://www.w3schools.com/c/c_functions_callback.php"] applied_in: [] github_commit: "" --- # [[C Callback Functions]] ## 🎯 ν•œ 쀄 톡찰 (One-line insight) `qsort()` β€” a real C standard library function, not a toy example β€” proves that callbacks aren't merely a teaching device but the actual mechanism the STANDARD LIBRARY itself relies on: `qsort()` has no idea how to compare YOUR specific data, so it delegates that decision entirely to a `compare()` function you supply, meaning the library's generic sorting algorithm and your data-specific comparison logic stay completely decoupled. [S1] ## 🧠 핡심 κ°œλ… (Core concepts) - **Callback function** β€” a function passed AS AN ARGUMENT to another function, which then calls it back whenever needed; implemented in C via function pointers. [S1] - **Decoupling logic from control flow** β€” the RECEIVING function (`runCallback`, `calculate`, `greet`) doesn't need to know the callback's name in advance; it just needs a matching function-pointer type. [S1] - **Parameter-matching requirement** β€” a callback with parameters requires the function pointer TYPE in the receiving function's signature to match exactly (`void (*callback)(int, int)`). [S1] - **Real standard-library usage: `qsort()`** β€” from ``; you supply a `compare()` function, and `qsort()` calls it internally as many times as needed while sorting. [S1] ## πŸ“– μ„ΈλΆ€ λ‚΄μš© (Details) - Basic callback with before/after wrapping: `void runCallback(void (*callback)()) { printf("Before calling the callback...\n"); callback(); printf("After calling the callback.\n"); } runCallback(sayHello);`. [S1] - Callback with parameters: `void calculate(void (*callback)(int, int), int x, int y) { callback(x, y); } calculate(addNumbers, 5, 3);`. [S1] - Real-world `qsort()` usage with a user-supplied comparator: `int compare(const void *a, const void *b) { return (*(int*)a - *(int*)b); } qsort(numbers, size, sizeof(int), compare);`. [S1] ## βš–οΈ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & updates) - ν˜„μž¬κΉŒμ§€ 발견된 λͺ¨μˆœ 사항 μ—†μŒ (No contradictions found in available sources). ## πŸ› οΈ 적용 사둀 (Applied in summary) ν‘œμ€€ 라이브러리의 qsort() ν•¨μˆ˜κ°€ μ‚¬μš©μž μ •μ˜ compare() μ½œλ°±μ„ λ°›μ•„ μ •λ ¬ 기쀀을 μœ„μž„λ°›λŠ” 것이 콜백 νŒ¨ν„΄μ˜ μ‹€μ œ μ‹€μ „ ν™œμš© μ‚¬λ‘€λ‘œ 원문에 직접 μ œμ‹œλ¨. [S1] ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code patterns) Using a user-supplied comparison callback with the standard library's qsort() (C): ```c #include int compare(const void *a, const void *b) { return (*(int*)a - *(int*)b); } int main() { int numbers[] = { 5, 2, 9, 1, 7 }; int size = sizeof(numbers) / sizeof(numbers[0]); qsort(numbers, size, sizeof(int), compare); return 0; } ``` ## βœ… 검증 μƒνƒœ 및 신뒰도 - **μƒνƒœ:** draft - **검증 단계:** conceptual - **좜처 신뒰도:** B (W3Schools β€” widely used educational reference, not a primary standards body) - **μ‹ λ’° 점수:** 0.87 - **쀑볡 검사 κ²°κ³Ό:** μ‹ κ·œ 생성 (New discovery) ## πŸ”— 지식 κ·Έλž˜ν”„ (Knowledge Graph) - **μƒμœ„/루트:** [[C Tutorial]] - **κ΄€λ ¨ κ°œλ…:** [[C Functions Pointers]], [[C Functions Inline]], [[C Scope]] - **μ°Έμ‘° λ§₯락:** 콜백 ν•¨μˆ˜ β€” 인라인 ν•¨μˆ˜(Functions Inline) μ±•ν„°λ‘œ 이어짐. ## πŸ“š 좜처 (Sources) - [S1] W3Schools β€” C Callback Functions β€” https://www.w3schools.com/c/c_functions_callback.php ## πŸ“ λ³€κ²½ 이λ ₯ (Change history) - 2026-07-04: Initial draft synthesized from the W3Schools "C Callback Functions" page (Astra wiki-curation, P-Reinforce v3.1 format).