>>14
Factorials for negative numbers are undefined. If you to implement specific error-handling code(bloated cludge to prevent using fact macro with negatives) inside every macro call, its your own choice: you could pass positive static integers arguments or use a specific function which would calculate dynamic arguments on the stack and even recursively call itself.