while (*expression) {
 if (isdigit(*expression) {
  m = strtol(expression, &expression);
  push(m);
 } else {
  switch (*expression++) {
   case '+':
    m = strtol(expression, &expression);
    push(m);break;
   case '-':
    m = -(strtol(expression, &expression));
    push(m);break;
   case '*':
    m = strtol(expression, &expression);
    pop(&n);
    m = n * m;
    push(m);break;
   他の演算子たち
}
スタックの中身を合計

これで累乗を
pop(&n);
if (n>0) {
 n = -n;
 m = -(pow(n, m));
} else
 pow(n, m);

とすると式の始めがマイナスの記号の時正しくない結果になってしまいます。
なにかいい方法があれば教えてください。