Fix function prototype warnings for C23 compatibility

- Add proper function prototypes: fatal(), my_exit(), set_order()
- Fix function pointer types to match call sites: void (*func)(int)
- Remove conflicting localtime() declaration in rip.c
- Fix incorrect new_item() call in state.c (remove unused argument)

Result: Zero compilation warnings, C23 compatible.

See MODERNIZATION_LOG.md for detailed analysis.
This commit is contained in:
David Silva
2025-11-07 15:33:46 +00:00
parent b66c6659c9
commit a0c66a6078
7 changed files with 75 additions and 13 deletions

View File

@@ -25,7 +25,7 @@ curscr->_curx = ox; // ERROR: Internal member access
The code attempted to directly access internal ncurses structure members (`curscr->_cury` and `curscr->_curx`), which are not part of the public API in modern ncurses libraries. This caused compilation errors on all modern systems.
**Root Cause**:
**Root Cause**:
- Modern ncurses (6.x) hides internal structure members
- The `WINDOW` structure is opaque in modern implementations
- Direct structure member access was possible in older ncurses versions (pre-1999)
@@ -61,6 +61,69 @@ move(oy, ox); /* Use public API instead of internal structure access */
---
### 2025-01-XX: Fix Function Prototype Warnings (C23 Compatibility)
**Issue**: Multiple functions declared without prototypes, causing C23 compatibility warnings
**Location**: Multiple files
**Problem**:
1. Functions declared as `void func();` (old-style) but defined with parameters
2. Function pointers without proper prototypes
3. Local function declaration conflicting with standard library
**Root Cause**:
- Pre-C99 code used old-style function declarations
- C23 requires proper function prototypes
- Function pointers need explicit parameter types
**Solution**:
1. **Fixed function prototypes in `extern.h`**:
- `void fatal();``void fatal(char *s);`
- `void my_exit();``void my_exit(int st);`
- `void set_order();``void set_order(int *order, int numthings);`
2. **Fixed function pointer types**:
- `void (*d_func)();``void (*d_func)(int);` in `rogue.h` and `daemon.c`
- `void (*func)();``void (*func)(int);` in `fuse()` and `start_daemon()`
- `void (*pa_daemon)();``void (*pa_daemon)(int);` in `potions.c`
3. **Removed conflicting local declaration**:
- Removed `struct tm *localtime();` from `rip.c` (conflicts with `<time.h>`)
4. **Fixed incorrect function call**:
- `new_item(sizeof(THING))``new_item()` in `state.c` (function doesn't take parameters)
**Reasoning**:
- Modern C standards require proper function prototypes
- Function pointers must match their call sites
- Local declarations shouldn't conflict with standard library
- Functions should be called with correct number of arguments
**Impact**:
- ✅ Eliminates all C23 compatibility warnings
- ✅ Build now compiles with zero warnings
- ✅ Better type safety and error checking
- ✅ No functional changes - all functions work as before
**Files Changed**:
- `extern.h` - function declarations
- `rogue.h` - function pointer types in struct and function signatures
- `daemon.c` - function pointer parameters
- `potions.c` - function pointer in struct
- `rip.c` - removed conflicting localtime declaration
- `state.c` - fixed incorrect function call
**Testing**:
- [x] Verify build succeeds ✅
- [x] Zero compilation warnings ✅
- [x] Executable created successfully ✅
**Status**: ✅ **COMPLETE** - Build now compiles with zero warnings
---
## Pending Issues
Issues identified but not yet fixed:
@@ -122,7 +185,7 @@ Issues identified but not yet fixed:
- [x] Builds successfully on macOS ✅
- [ ] Builds successfully on Linux
- [x] No compilation errors ✅
- [ ] No compilation warnings (currently 10+ warnings documented above)
- [x] No compilation warnings ✅ (All warnings fixed!)
---