По старым причинам у меня есть макрос; назовите это #define foo
. Теперь foo
- это макрос не функционального типа. Мне нужно, чтобы foo
расширился до нуля или чего-то, что может игнорироваться компилятором (например, атрибутом), когда оно предшествует вызову функции.
Однако я обнаружил, что теперь мне также нужно создать функция с именем foo
.
Препроцессор обрабатывает макросы в стиле функции иначе, чем не-макросы, что подразумевает, что может быть способом заставить его преобразовать foo(...)
иначе, чем скажем, foo ...
. Однако я не могу просто дать другое определение для foo
как макроса функции.
Можно ли как-нибудь решить эту проблему?
ps "Не делайте этого во-первых "не полезно. Макрос foo
уже существует; не выполнимо , чтобы изменить это, ни недавно введенная функция (которая находится вне моего контроля). Пожалуйста, ограничьте дискуссию ответом на вопрос в виде вопроса .
Пример:
#define /* ... magic here ... */
// void foo(int x, int y); <-- might be in a module
void bar()
{
// First 'foo' has no effect
// Second 'foo' calls the function 'foo'
foo foo(42, 7);
}