LINUX.ORG.RU

История изменений

Исправление 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, :

не надо так писать, даже если это валидное выражение.