Эмуляция if __name__ == __main__ в С++ вызывает ошибку «функциональный макрос не определен»C++

Программы на C++. Форум разработчиков
Anonymous
Эмуляция if __name__ == __main__ в С++ вызывает ошибку «функциональный макрос не определен»

Сообщение Anonymous »

Я пишу простой файл сборки с помощью bash, который должен облегчить мне переключение точки входа путем эмуляции Python

Код: Выделить всё

if __name__ == '__main__':
main()
Моя идея заключалась в том, чтобы включить макрос, передав -D __MAIN__=\"$MAIN_FILE\" в clang++, где MAIN_FILE — это файл, который вы указываете при запуске сценарий сборки. Затем мне просто нужно будет сравнить макрос __MAIN__ с предопределённым стандартным макросом __FILE__ для каждого исходного файла. Примерно так:

Код: Выделить всё

#if equals(__FILE__, __MAIN__)
int main()
{
/* code */
return 0;
}
#endif

Проблема, с которой я столкнулся, заключается в том, что функция равенства работает во время компиляции. Читая об этом, кажется, что можно определить функцию constexpr, которая сравнивает строки во время компиляции (по крайней мере, в соответствии с этим и этим ответом).
Однако всякий раз, когда я попытаюсь создать такую ​​функцию (или скопировать код отсюда или отсюда), получаю следующую ошибку:

ошибка: функциональный макрос 'равно' не определено

Что мне кажется странным, поскольку это не макрос и не неопределенное значение. Я также не смог найти решение при поиске сообщения об ошибке.
Вот полный код для справки:

Код: Выделить всё

#include 

constexpr bool equals(const char* a, const char* b)
{
return *a == *b && (*a == '\0' || equals(a + 1, b + 1));
}

#if equals(__FILE__, __MAIN__)
int main()
{
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/50086636/emulating-if-name-main-in-c-causes-error-function-like-macro-is-no[/url]

Вернуться в «C++»