Products · Product
C
Raised as a usability problem by 165 people on Hacker News over 19 years (2008–2026), in 161 threads.
No issue was raised by at least 3 people in 3 threads this year.
- 1
- 2
- 1
- 2
- 3
- 4
- 5
- 6
- 7Macros are extremely hard to debugUnreviewed
- 8
- 9
- 10
- 11Segfaults are nearly impossible to debugUnreviewed
- 12
Every issue, all time, most people first
Mixed pointer and non-pointer declarations are easy to misreadUnreviewed
20082026- Passing variable-length arrays is confusing, error-prone, and compilers often fail to catch mistakes2026-06-16
- Beginners must learn how to do basic tasks, find libraries, and set up tooling themselves2026-03-05
- Pointer dereference and increment expressions are concise but confusing to read2024-10-16
C syntax makes novice programmers prone to errorsUnreviewed
20082026- C's type syntax is too clever and confusing for beginners2025-08-10
- C doesn't clearly tell you when your program is faulty, or reports it in unintuitive ways2022-12-24
- Declaration syntax reads by usage, so types are hard to parse intuitively2020-09-05
String handling is clunky with no native string supportUnreviewed
20082026- String handling is clunky and makes undefined behavior easy to trigger2025-12-31
- Safer string functions are less performant and more annoying to use2024-04-03
- String handling is clunky and unpleasant to use, with no native string support2023-07-13
strncpy and strlcpy fail silently or truncate, causing errorsUnreviewed
20082026- Cryptic symbols and abbreviations like char *, strcpy make code hard to read and decode2025-09-08
- Easy to misuse: strncpy and strlcpy fail silently or truncate, causing errors2021-03-04
- Takes more and uglier code to use correctly than strlen and strcpy2019-08-25
Splitting strings is hard since strtok is bannedUnreviewed
20082026- Splitting strings in C is hard; the banned strtok macro blocked the obvious approach2024-02-24
- Inconsistent string functions with hidden quirks you must memorize, like strtok's internal state2023-04-13
- Composing and managing strings manually in C is a major headache2020-11-25
Macros are extremely hard to debugUnreviewed
20082026- Macro expansion makes error messages crazy and hard to read, worse than C++2021-02-23
- Macros are extremely hard to debug and confusing to work with2019-02-28
- Macro-generated names collide with user variables, causing very confusing errors2017-01-07
Every call needs a return-code check, easy to get wrongUnreviewed
20082026- Every call needs a result check and goto cleanup, making the API verbose and laborious to write2023-02-05
- Returning 0 is ambiguous, so it's unclear whether a call failed or why2022-08-22
- Every call needs a return-code check, making code hard to read and easy to get wrong2018-12-13
Locale is process-global and can't be passed to library functionsUnreviewed
20082026- Locale-dependent libc functions behave unpredictably depending on global locale state2023-06-06
- Locales are global, so every use means modifying and resetting state, which is error-prone2022-02-26
- Locale is process-global and cannot be passed explicitly to library functions2018-12-15
Mismatched braces produce meaningless errors across the whole fileUnreviewed
20082026- Missing brace takes long to find; compiler fails tens of lines below2020-08-18
- Mismatched braces mess up the whole file and produce meaningless errors2016-01-01
- Opening brace at line end is easy to miss, causing subtle scope bugs2013-11-28
Segfaults are nearly impossible to debugUnreviewed
20082026- Segfault error gives no clue about what went wrong, forcing learner to install a debugger2022-01-12
- Easy to make memory mistakes and hard to catch edge-case segfaults2016-12-21
- Segfaults are almost impossible to debug; logs lose the most recent lines on reset2014-02-07
No memory protection makes C programming very hardUnreviewed
20082026- Dynamically allocating intricate memory relationships makes C hard to use2025-04-04
- Lack of memory protection makes programming in C very hard2024-12-01
- Hardware overflow trapping exists but is practically unusable from C2015-11-16
Unreviewed issues were grouped by machine: Claude Haiku labelled each comment as a usability complaint, named what it's about and summed up the problem in a line, and a small model grouped similar problems. Nobody has checked them by hand. Expect mistakes.
The newest 50 complaints
- Confusing function name that suggests a use case it rarely fits2026-06-21
- Passing variable-length arrays is confusing, error-prone, and compilers often fail to catch mistakes2026-06-16
- Must manually free several allocated structures when an error occurs mid-function2026-06-13
- Beginners must learn how to do basic tasks, find libraries, and set up tooling themselves2026-03-05
- Standard library is footgunny, making it easy to make mistakes2026-02-02
- String handling is clunky and makes undefined behavior easy to trigger2025-12-31
- Cryptic symbols and abbreviations like char *, strcpy make code hard to read and decode2025-09-08
- C's type syntax is too clever and confusing for beginners2025-08-10
- A memory corruption bug forces a full restart, losing the working state2025-06-10
- Dynamically allocating intricate memory relationships makes C hard to use2025-04-04
- Took longer to figure out than writing the program; confusing and maddening to use2025-02-17
- Time API is a footgun, with inconsistent 0- and 1-indexing in struct tm2025-02-16
- Grepping headers for a type's definition is slow and unreliable across many files2025-01-12
- Nested defer blocks make execution order diverge from source order, so the code is hard to read and debug2025-01-08
- Lack of memory protection makes programming in C very hard2024-12-01
- Brackets and commas force left-right navigation and cause confusing errors when wrong2024-11-25
- Compiler gives no thread-safety help, so data races are easy to write and hard to debug2024-10-26
- Pointer dereference and increment expressions are concise but confusing to read2024-10-16
- Hard-to-understand, hard-to-remember names force frequent lookups in documentation2024-07-15
- Malloc/free interface is badly designed, hard for programmers to use correctly2024-06-27
- Compiler gives no warning when undefined behavior is accidentally triggered2024-06-15
- Mixed pointer and non-pointer declarations are easy to misread, slowing comprehension2024-05-18
- Spacing around asterisk makes declarations confusing about what is declared2024-05-17
- Safer string functions are less performant and more annoying to use2024-04-03
- Splitting strings in C is hard; the banned strtok macro blocked the obvious approach2024-02-24
- So many undefined behaviors make the language painful to program in2024-01-21
- Partial polymorphic features are weird, awkward to use, and have unclear semantics2024-01-18
- Arbitrarily sized integer types are virtually impossible to use correctly, causing hidden bugs2023-11-07
- Cryptic abbreviated function names are hard to understand and must be looked up2023-07-18
- Truncation is not clearly signaled, so callers can silently operate on wrong paths2023-07-18
- String handling is clunky and unpleasant to use, with no native string support2023-07-13
- String manipulation is painful and functions must be duplicated for each numeric type2023-07-09
- Novice can't tell that integer division compiles to slow polyfill code2023-07-09
- Locale-dependent libc functions behave unpredictably depending on global locale state2023-06-06
- Makes code hard to read and understand when unfamiliar2023-05-04
- Confusing concepts for beginners: strings, arrays and pointers get mixed up2023-05-03
- Inconsistent string functions with hidden quirks you must memorize, like strtok's internal state2023-04-13
- Standard string functions are error-prone, causing endless bugs for programmers2023-04-06
- Types add extraneous noise, making code hard to reason about and follow2023-04-04
- Bit fields are interpreted differently across compilers, forcing workarounds2023-02-19
- Every call needs a result check and goto cleanup, making the API verbose and laborious to write2023-02-05
- C doesn't clearly tell you when your program is faulty, or reports it in unintuitive ways2022-12-24
- Forced to declare all variables at the top of the scope, which is annoying to write2022-12-23
- Function pointer syntax is so awkward that programmers avoid using them2022-12-21
- Interface unusable when char and int are both 16 bits2022-12-14
- Must size buffers and copy bytes manually to concatenate strings2022-12-03
- Null-terminated strings cause off-by-one errors and make length checks expensive2022-12-03
- Complex declarations like arrays of function pointers are hard to read and understand2022-11-29
- Bitwise subset test '(b & ~a) == 0' is hard to read and understand2022-08-30
- Returning 0 is ambiguous, so it's unclear whether a call failed or why2022-08-22