Por que não posso escrever este código assim?

Olá, Eu tenho o seguinte código que deve receber 4 números e dizer qual deles é o maior.

#include <stdio.h>  int max_of_four(int x, int z, int y, int w);  int main() {     int a, b, c, d;     scanf("%d %d %d %d", &a, &b, &c, &d);     int ans = max_of_four(a, b, c, d);     printf("%d", ans);      return 0; }   int max_of_four(int x, int z, int y, int w){     int max1, max2;      x > z ? max1 = x : max1 == z;     y > w ? max2 = y : max2 == w;       return max1 > max2 ? max1: max2; }  

A minha dúvida está na função max_of_four. Eu comparo dois números duas vezes e o maior deve ser atribuído à sua respectiva variável. Na parte do else(... : max1 == z; / ... : max2 == w;) em vez de == deveria ser =, porém se eu colocar o = o código dá o erro “lvalue required as left operand of assignment”.
Por outro lado, se eu deixo o == o código não roda direito, não imprimindo o valor mais alto caso ele esteja na segunda ou quarta posição.

Eu sei que poderia fazer o seguinte:

 int max1 = x > z ? x : z;  int max2 = y > w ? y : w; 

Porém gostaria de saber se meu código é incorrigível ou se estou deixando algo passar.