{"id":17949817,"url":"https://github.com/gurugio/book_cprogramming","last_synced_at":"2025-04-12T22:35:31.305Z","repository":{"id":6970618,"uuid":"8223656","full_name":"gurugio/book_cprogramming","owner":"gurugio","description":"Framework and Plugin design in C","archived":false,"fork":false,"pushed_at":"2024-10-16T12:19:09.000Z","size":1014,"stargazers_count":236,"open_issues_count":1,"forks_count":26,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-04-04T02:07:38.526Z","etag":null,"topics":["c","software-architecture","software-design"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gurugio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-02-15T18:26:36.000Z","updated_at":"2025-03-31T16:38:07.000Z","dependencies_parsed_at":"2024-12-25T08:04:23.454Z","dependency_job_id":"6e7538de-8d7c-4bd2-a6e9-dae1593c5138","html_url":"https://github.com/gurugio/book_cprogramming","commit_stats":{"total_commits":176,"total_committers":4,"mean_commits":44.0,"dds":"0.11363636363636365","last_synced_commit":"f716506f4aa8fd9692a92075ff51780a1c341df0"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gurugio%2Fbook_cprogramming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gurugio%2Fbook_cprogramming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gurugio%2Fbook_cprogramming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gurugio%2Fbook_cprogramming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gurugio","download_url":"https://codeload.github.com/gurugio/book_cprogramming/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248642311,"owners_count":21138350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","software-architecture","software-design"],"created_at":"2024-10-29T09:34:23.207Z","updated_at":"2025-04-12T22:35:31.259Z","avatar_url":"https://github.com/gurugio.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Professional C programming : Framework and plugin design in C\n\nI first met the C language 20 years ago. I have been working with C language for 12 years.\nI have read several C programming books, but their purpose is to teach how to start programming in C.\nThere is no book about program in C practically for a real product.\nFortunately, I have learned good C programming skill when working for companies that have good C programmers and good development process.\nI have also seen how great C programmers develop large scale software, from the Linux kernel sources.\n\nThis document is some part of what I have learned and seen.\n\nFor students, this document takes one or two weeks. Please focus on how the C basics, such as function pointer, pointer, macro and etc, are used in the real product.\nIf you are already a professional C programmer, you could compare the source of this document and your product. I would be happy if you find something that can be applied to your product.\n\nPlease let me know if you have any tips for practical C programming skills. Please register your tips in the ticket of this repository. I will write a document for it and add here with your name.\n\n*I am not a native English speaker. Please inform me if you find any broken English.*\n\n* First version in Korean: Feb. 12 2019\n* Start translation: Feb. 23 2019\n* Finish translation: Mar. 12 2019\n\n## INDEX\n\n* [Error handling with goto](error_handle.md)\n* [Make if-else short with branch table](long-if.md)\n* [Make for-loop with macro](foreach.md)\n* Implement framework and plugin\n  * [Object programming in C: make cstring class with C](cstring.md)\n  * [Introduction](interface.md)\n  * [Implement unittest framework](unittest.md)\n  * [Implement unittest for cstring](unittest_cstring.md)\n  * [Make test case with macro](unittest_cstring2.md)\n* Sample project: serial number generator\n  * [Initial version](serial_step1.md)\n  * [Implementation the framework and plugin for the serial number generator](serial_step2.md)\n\n## TODO\n\n* pdu allocation\n* atomic counter =\u003e per_cpu counter\n* test_and_set_bit_lock\n* function pointers -\u003e virtual abstract layer (kernel: virtual filesystem interface)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgurugio%2Fbook_cprogramming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgurugio%2Fbook_cprogramming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgurugio%2Fbook_cprogramming/lists"}