Why `ifndef and `define are used together?

Hi,

I want to redefine some alias with the same name according to condition
let’s say,
//code from here
bit drop;

if (drop == 1)
define drop_by_ip uvm_info
else
define drop_by_ip uvm_error

//and that alias I am using in the display statement
`drop_by_ip(“DROP”,“PACKET DROPPED BY IP”)

So in simulation, it will always take as `uvm_error so how can I do to replace the string and I know that demoter class can do that but don’t want to use demoter class of UVM