Я так часто встречался в общем коде stm32f0, и я не могу понять его. что это означает по приведенной ниже строке. Я знаю, что это сложно понять. Но моя точка зрения заключается в вопросительном знаке (?) в определении. Может кто-нибудь объяснить это."?" mark in C macro
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
'?:' - условный оператор. Кто-то называет это тройным оператором. –
http://en.wikipedia.org/wiki/%3F:#C – Michael
Если вы используете assert_param (a), этот макрос ничего не сделает, если a отличен от нуля, но напечатайте ошибку, если это так. А? e1: e2; является альтернативной формой if (a) {e1; } else {e2; } Макрос, подобный этому, часто используется, чтобы утверждать, что указатель не является нулевым указателем (который является нулевым). Он также может иметь вид (!! a)? e1: e2; для нормализации a. – midor