История изменений
Исправление IvanRia, (текущая версия) :
не надо так писать, даже если это валидное выражение.
#define SET_A(a, b, c) ((__builtin_types_compatible_p(typeof(a), char*) && (a)) ? (*(char*)(a) = c) : (b = c))
не претендую ни на что, но все-таки понятнее вашего и ф-цию не надо новую писать, и b все-таки не в пустую присваивается значение, но это gnu99, не C99.
А в C11 уже добавили полноценную стандартную проверку типов.
Исправление IvanRia, :
не надо так писать, даже если это валидное выражение.
#define SET_A(a, b, c) ((__builtin_types_compatible_p(typeof(a), char*) && (a)) ? (*(char*)(a) = c) : (b = c))
не претендую ни на что, но все-таки понятнее вашего и ф-цию не надо новую писать, и b все-таки не в пустую присваивается значение, но это gnu99, не C99
Исходная версия IvanRia, :
не надо так писать, даже если это валидное выражение.