soap_strcpy의 반환 값이 무엇인지 궁금합니다.어떻게이 매크로를 해석 할 수 있습니까?
# define soap_strcpy(buf, len, src) (void)((buf) && (size_t)(len) > 0 && (strncpy((buf), (src), (len) - 1), (buf)[(len) - 1] = '\0'))
내 도구에서 반환 값이 항상 거짓임을보고합니다. 아래의 마지막 조건은 일종의 일반적인 표현입니까? 어떻게 해석 할 수 있습니까?
(strncpy((buf), (src), (len) - 1), (buf)[(len) - 1] = '\0'))
@NGI 예. 'operator &&'는 매개 변수 평가 순서가 정의되지 않은 규칙에 대한 예외입니다. 'operator &&'는 왼쪽에서 오른쪽으로 평가되고 LHS가 거짓이면 RHS를 평가하지 않습니다. 'if (ptr && * ptr == whatever)'은 매우 일반적으로 사용되는 구조이며, 이것이 사실이 아니라면 유효하지 않을 것이라고 생각하십시오. –
@Miles Budnek [부 표현의 평가 순서 나 부작용이 나타나는 순서에 의존하지 마십시오] (https://www.securecoding.cert.org/confluence/display/c)의 잘못된 일반화 문제를 고쳐 주셔서 감사합니다. /EXP10-C.+Do+not+depend+on+the+order+of+evaluation+of+subexpressions+or+the+order+in+which+side+effects+take+place) – NGI