I disagree. There are a few cases where a number is more expressive - I even think MISRA has exemptions for 1, 0 and FF.
But in most cases what I want is not the number, it's the _meaning_ of the number. Be it the Command ID, ram block Address or whatever it is. Generally, having code sprinkled with magic numbers is pretty shitty.
In my view:
a = a<<18;
a |= b<<8;
a |= c;
is a kosher use of numbers. But
case(ChoiceID):
switch 1:
/* Do somethin'*/
break;
switch 26:
/* Do somethin' else*/
break;
default:
break;
is not. Generally, numbers are ok as long as you express mathematical ideas nut not ok when you express logical ideas.