Как говорили другие, 070
- это восьмеричная (и 0x70
шестнадцатеричная) константа, в которой и заключается ваша проблема.
Я хотел бы добавить, что вы должны использовать inline
функции вместо макросов:
inline int Foo(int x) { return (x - '!' & 070); }
C ++ многое сделал для того, чтобы мы могли избавиться от препроцессора для многих вещей, потому что это плохо, плохо себя ведет и опасно. Если вы можете обойтись без этого, сделайте это.
(И если вы используете его, по крайней мере, помилуйте тех, кто будет иметь дело с вашим кодом позже, чтобы сделать макросы полностью прописными.)