BIP152 explains two types of block announcing:
- High Bandwidth Relaying (sendcmpct(1))
- Low Bandwidth Relaying (sendcmpct(0))
I understand why we need sendcmpct message for the first case. In this way, we inform the peer that we want it to notify us by sending us a compact block. Similar to when we send a sendheaders message indicating that we want announcing via the header, not the inv.
I don't understand why the sendcmpct message is needed for the second case. In second case, notifying is done via header/inv, and then if we want a compact block, we need to send getdata(MSG_CMPCT_BLOCK). If we don't want to, we send MSG_BLOCK or MSG_WITNESS_BLOCK. Therefore, everything would work the same if we previously didn't send a sendcmpct message first.