在使用该名称创建变量后调用本机C函数

时间:2017-05-22 04:26:14

标签: c++ c variables object system

我有一个非常大的应用程序,它将大部分程序数据保存在一个名为system的大型容器对象中。

所以我一直在访问内容,例如printf("%s\n",system.constants.jobname);,并且更改system的名称是不可取的。

我后来才知道函数system作为本地C函数存在,用于运行终端命令,例如system("rm *.txt");

我的问题是我在尝试使用system作为函数时遇到编译错误,因为它已经被定义为对象。

有没有办法可以显式忽略编程定义的变量来调用本地C函数?或者为原生system函数添加别名? (我正在使用C ++,所以使用它会很好)

2 个答案:

答案 0 :(得分:2)

如果您使用的是C ++,则system位于全局命名空间中。假设你把你的东西放在一个合适的命名空间里(你有,对吧?)你可以把它称为::system

答案 1 :(得分:2)

假设使用共享库是一种可接受的解决方案,您可以这样做。

创建另一个不使用system容器的C文件。现在编写一个函数my_system,它是system的包装器。

通过包装器我的意思是,它采用相同的参数并调用system并返回system返回的内容。

不要忘记导出my_system

现在将其编译为dll(或.so on * NIX)。

在主项目中,加载dll并获取句柄。现在在句柄上查询my_system的地址,并使用函数指针进行调用。