2016-11-02 3 views
-1

나는이 if 문을 보았고 정확하게 작동하는지 확실하지 않습니다. 무엇과 비교하고 있습니까? && 또는 ||이 부족합니까? 팸은 나를 혼란스럽게합니다.C 이상한 문이 구문

if ((list->func)((list->head)->dataPointer, newOb) < 0) { 
+2

이것은 중복 된 괄호를 가지므로'if (list-> func (list-> head-> dataPointer, newOb) <0)'이라고 쓰여졌을 수도있다. –

+0

같은 결과가'result = list-> func (list-> head-> dataPointer, newOb);'if (result <0)'이 뒤 따른다. 가독성을 위해 복잡한 표현식을 여러 줄로 나누는 것이 가장 좋습니다. – Lundin

답변

5

은 무엇을 어떻게 비교되고있다? 팸은 나를 혼란스럽게합니다. 각 if 문처럼

if() 사이 부분의 결과는 0과 비교하고있다.

& & 또는 ||가 부족합니까?

표시되지 않음 & & 또는 ||

팸은 나를 혼란스럽게합니다. (list->func)((list->head)->dataPointer, newOb)이 무엇

는 (반드시이 순서대로)입니다 :

  • list->func
  • 는 두 개의 인수 (list->head)->dataPointernewOb을 통과 (list->head)->dataPointer
  • 전화list->func 평가 평가합니다.

그 결과는 if() 사이에 있으므로 0과 비교됩니다.

+0

감사합니다. 팸알은 읽기가 어려워졌습니다. 모두 의미가 있습니다. – TooTiredToDrink

0

자, 첫 번째 괄호 세트는 list가 func라는 멤버가있는 객체에 대한 포인터임을 나타냅니다. func는 함수입니다. 그래서 (list-> func)는 함수 호출입니다. 이 함수는 분명히 두 개의 인수를 취합니다. 건네받는 최초의 인수는 (list-> head) -> dataPointer입니다. (list-> head)는 list라는 포인터가 가리키는 객체가 head라는 멤버를 가지고 있음을 나타냅니다. head는 포인터이며 dataPointer라는 멤버가있는 객체를 가리 킵니다. 함수에 전달되는 두 번째 인수 (list-> func)는 newOb입니다. 함수 (list-> func)는 분명히 일종의 숫자 값, 아마도 int를 리턴합니다.
코드는 다음과 같이 다시 쓸 수 있습니다. if (list-> func (list-> head-> dataPointer, newOb) <) 무슨 일이 벌어 지는지 확인하는 데 도움이되는 경우.

+1

'(list-> func)'은 함수 호출이 아닙니다. 함수 호출은 바로 뒤에 나타나는'()'연산자로 표시됩니다. –

+0

글쎄, 기술적으로 전체 표현식 (list-> func) (stuff, more stuff)이 함수 호출이지만, 더 큰 요점은 list-> func가 함수이며, 호출되는 것입니다. – critmass