Ок, ещё один интересный момент:
PHP код:
#if !defined toupper
#define toupper(c) ( (c)>='A' && (c)<='Z' ? (c) + 'A' - 'a' : (c) )
#endif
Такой подход прокатил бы в Pawn, но в C и C++ оператор defined работает только в директивах #if/#elif и только с названиями макросов (если это только не какое-то нестандартное расширение, специфичное для какого-то одного или нескольких компиляторов).
Даже если функция toupper была объявлена в одном из заголовочных файлов, выражение "defined toupper" вернёт false и твой макрос в любом случае заменит эту функцию.
Должно быть какое-то решение получше, чем это. ИМХО, даже просто ничего не делать, оставив предупреждение компилятора о необъявленной функции, будет лучше, т.к. функция toupper всё равно есть в стандартной библиотеке (libc.so или как ещё она должна называться).