В качестве учебного упражнения мои три функции - ToggleCase, LowerCase и UpperCase - каждая ожидает указатель на строку символов ASCII, оканчивающуюся нулевым символом; они работают как положено. Существуют ли более эффективные или более быстрые методы решения этой задачи? Я нарушаю какие-либо невысказанные правила хорошего C-кодирования? Я использовал макросы, потому что, я думаю, он делает код лучше и эффективнее вызовов функций. Это типично или излишне?
Пожалуйста, не стесняйтесь придираться и критиковать код (но будьте добры).
case_conversion.h
#define CASE_FLAG 32
#define a_z(c) (c >= 'a' && c <= 'z')
#define A_Z(c) (c >= 'A' && c <= 'Z')
void ToggleCase(char* c);
void LowerCase(char* c);
void UpperCase(char* c);
case_conversion.c
#include "case_conversion.h"
void ToggleCase(char* c)
{
while (*c)
{
*c ^= a_z(*c) || A_Z(*c) ? CASE_FLAG : 0;
c++;
}
}
void LowerCase(char* c)
{
while (*c)
{
*c ^= A_Z(*c) ? CASE_FLAG : 0;
c++;
}
}
void UpperCase(char* c)
{
while (*c)
{
*c ^= a_z(*c) ? CASE_FLAG : 0;
c++;
}
}