在C ++中模拟__name__ == __main__是否导致错误“未定义类似函数的宏”

泰德·克莱恩·伯格曼

我正在用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

我遇到的问题是使函数equals在编译时起作用。在这读了,好像应该是可以定义在比较编译时字符串一个constexpr功能(至少根据这个这个答案)。

但是,每当我尝试创建这样的函数(或从此处此处复制代码)时,都会出现以下错误:

错误:未定义类似函数的宏“等于”

这对我来说似乎很奇怪,因为它既不是宏也不是未定义的。搜索错误消息时也找不到解决方案。

这是完整的代码供参考:

#include <iostream>

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 << "Running " << __MAIN__ << std::endl;
        return 0;
    }
#endif

编译:

clang++ main.cpp -std=c++14 -D __MAIN__="fullpath/main.cpp"

是什么导致此错误,如何解决我的问题?

罗密欧

#if并且#endif预处理程序指令-预处理程序作为编译步骤的一部分运行,但是它不了解C ++作为一种语言。

您不能将预处理器与C ++功能(例如constexpr函数)混用和匹配

如果您希望这样做,则需要实现自己的#define EQUALS宏,该宏在预处理步骤中完全检查字符串的相等性。我不确定是否可行(值得)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果在IPython中__name__ =='__main__'

如何在Python模块中定义__name__变量?

如何测试或模拟“如果__name__ =='__main__'”内容

相当于Ruby中的`if __name__ =='__main __'`

在Python中获取调用函数模块的__name__

__name__ ==“ __main__”怎么办?

为什么这种“未定义的外部变量”不会在C ++ 17中导致链接器错误?

致命错误:调用C:\ xampp \ htdocs中未定义的函数sqlsrv_connect()

在Python中调用getLogger之前,是否需要显式检查__name__ ==“ __main__”?

R是否与python,C中的main函数类似?

在最小的C程序中未定义对“ main”的引用

如果__name__ =='__main__'函数调用

在Python multiprocessing.Process中,我们是否必须使用`__name__ == __main__`?

if __name__ ==“ __main__”的位置:

在C ++中重写虚拟函数时出现未定义的参考错误

是否有C与Python等效:如果__name__ =='__main__':在文件顶部写入main()?

C ++对共享库中类的构造函数和析构函数的未定义引用错误

C中的“未定义的函数引用”错误,具体取决于定义的位置

在main()中未定义对函数的引用

main.o:main.c:function main:错误:未定义对'variable_name'的引用

模拟C中的空指针未定义行为

在gwan / libraries中从C-library链接另一个库会导致“未定义符号”错误

对C ++中函数的未定义引用

Pycharm“Python 控制台”中的 exec(open) 函数不执行“if __name__ == '__main__”块

使用 if __name__ == "__main__" 从其他文件调用函数:

c - 在函数“_start”中:(.text+0x20):对“main”的未定义引用

如何在“if __name__ == '__main__'”中模拟.patch 变量

导致未定义函数的守卫中的语法错误

替代 if __name__ == '__main__':