我有一个非常大的应用程序,它将大部分程序数据保存在一个名为system
的大型容器对象中。
所以我一直在访问内容,例如printf("%s\n",system.constants.jobname);
,并且更改system
的名称是不可取的。
我后来才知道函数system
作为本地C
函数存在,用于运行终端命令,例如system("rm *.txt");
我的问题是我在尝试使用system
作为函数时遇到编译错误,因为它已经被定义为对象。
有没有办法可以显式忽略编程定义的变量来调用本地C
函数?或者为原生system
函数添加别名? (我正在使用C ++,所以使用它会很好)
答案 0 :(得分:2)
如果您使用的是C ++,则system
位于全局命名空间中。假设你把你的东西放在一个合适的命名空间里(你有,对吧?)你可以把它称为::system
。
答案 1 :(得分:2)
假设使用共享库是一种可接受的解决方案,您可以这样做。
创建另一个不使用system
容器的C文件。现在编写一个函数my_system
,它是system
的包装器。
通过包装器我的意思是,它采用相同的参数并调用system
并返回system
返回的内容。
不要忘记导出my_system
现在将其编译为dll(或.so on * NIX)。
在主项目中,加载dll并获取句柄。现在在句柄上查询my_system
的地址,并使用函数指针进行调用。