Поскольку макросы являются текстовой подстановкой, то получается:
k = 27 / 3 * 3 * 3;
Поскольку умножение и деление происходят слева направо, получается:
k = ((27 / 3) * 3) * 3;
Итак, вы хотите изменить это двумя способами:
#define CUBE(p) ((p)*(p)*(p))
Внешние скобки приводят к умножению перед любыми другими операциями.
Скобки вокруг отдельных p относятся к случаю, когда вы делаете:
CUBE(1 + 2);
Без этих внутренних скобок приоритет оператора может сбить вас с толку.