我有一个C函数(store_mode_ - 在file_A.c中定义),它在Fortran代码中调用。
看起来像这样..
public class MyService : IMyService
{
private IObserverManager observerManager;
public MyService(IObserverManager obsManager){
this.observerManager = obsManager;
}
public void MyMethod(MyObject myObject){
IObserver[] observers = this.observerManager.GetObservers();
foreach(var ob in observers){
ob.Execute(myObject);
}
}
}
public class ObserverManager : IObserverManager {
public List<IObserver> GetObservers(){
... some code to return the list of observers
}
public void RegisterObserver(IObserver obs)
{
... add obs to list of obs
}
}
public class Ob1 : IObserver{
public void Execute(MyObject obj){
//do something
}
}
public class Ob2 : IObserver{
public void Execute(MyObject obj){
//do something
}
}
public class StrategyResolver : IStrategyResolver
{
private IUnityContainer container;
public StrategyResolver(IUnityContainer c)
{
this.container = c;
}
public T Resolve<T>(String namedStrategy){
return this.container.Resolve<T>(namedStrategy);
}
}
public class MyRegistry : UnityRegistry
{
private IUnityContainer container;
public MyRegistry(IUnityContainer c)
{
this.container = c;
}
public MyRegistry(){
this.container.RegisterType<IObserverManager, ObserverManager>();
this.container.RegisterType<IMyService, MyService();
this.container.RegisterType<ISomeClass, SomeClass>();
this.container.RegisterType<IObserver, ObserverA>("CategoryA");
this.container.RegisterType<IObserver, ObserverB>("CategoryB");
this.container.RegisterType<IStrategyResolver, StrategyResolver>();
}
}
public class SomeClass : ISomeClass
{
private IObserverManager observerManager;
private IStrategyResolver strategyResolver;
public SomeClass(IObserverManager oManager, IStrategyResolver sResolver)
{
this.observerManager = oManager;
this.strategyResolver = sResolver;
}
public void Process(MyObject obj)
{
IObserver obs = this.strategyResolver.Resolve<IObserver>(obj.Category);
this.observerManager.RegisterObserver(obs);
...etc....
}
}
我正在尝试使用在Fortran调用中作为参数传递的值(n,l,w,U)来填充结构。上面的代码在我的主文件File_B.c中直接定义时工作,该文件调用其中的fortran代码。
但是..如果我在file_A.c中定义了上面的函数(main不在的那个),它就不起作用了。我很欣赏这是由于.c文件之间缺少共享全局变量。我想知道是否有解决方案吗? 也许对于extern,虽然我玩了一点没有成功。
答案 0 :(得分:1)
static int nmode = 0;
如果要在两个文件中包含该行,那么您有两个nmode
个变量,每个文件一个。 static
使符号成为翻译单元的私有。
相反,你可能想要
int nmode;
在一个文件中,
extern int nmode;
在另一个。 (没有必要明确地将其初始化为零。保证静态存储。)