Эмуляция 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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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