It is best to avoid circular dependency in software design, because it is confusing and can cause runtime problems (unlikely in MQL4, I think). For the first reason, grouping the functions differently might be better.
I agree that would be better if possible. I'm still dealing with the differences between MT4 and other programming languages. I have trouble accepting the fact that I can't do things in MT4 that are standard techniques in other languages.
In the past I have always been able to find a way to get something done that I want to do, but I keep running up against things in MT4 that people tell can't be done, but I'm going to keep asking my questions. I frequently discover that someone else has found a way to get it done.
It is possible to avoid cyclic dependency of files if you have no cyclic dependence among the functions themselves. Even if they do, you can avoid it by ensuring any cyclically dependent functions are in the same file.
eg suppose functions A1, A2 are in include file A and B1, B2 are in file B, with A1 using B1 and B2 using A2. You can regroup the functions by dependence, with B1 and A2 in a file for functions that don't rely on any includes and A1 and B2 in a second file that includes the first one.
However, if function A1 depends on function B1 and B1 depends on A1, you obviously can't get rid of the cyclic include without having both of these functions in the same file. And if you do, this situation is prone to cause problems.
In fact, contrary to my earlier statement, you can have the most nonsensical code that just gets warnings at compile time and is silent at run time.
Eg I wrote two include files. The first include file has this code:
and the second include file has this code:
Pretty silly, huh? And finally an expert has this code:
Alert("this does not display");
So you have two functions that use each other in their definitions (in a very silly way that never terminates in theory), and an expert that uses one of the functions.
If you execute this expert it does nothing visible. What happens is that the start() code gets called on a tick, but never displays the first alert because it can't calculate test1() and never gets to the second Alert.
Of course if you remove the line Alert(test1()); from the expert, the message displays.
There is nothing wrong with two or more functions calling each other in a cyclic fashion in some cases (it's no worse than recursion, where one function calls itself). It just means there is one more way for code to not terminate if it's written badly (this can be a silent error in MT4). But in my opinion, if functions are inseparably interdependent, they should go in the same include file.
I don't have 2 functions that are dependent on each other. I just have a function in a.mqh that depends on a function in b.mqh, and a function in b.mqh that depends on a function in a.mqh.
But I want to keep the functions in the include files they are in. It helps me keep things straight in my head. Eventually when I'm positive that they are completely error free, I may put them all in the same file, but I'm just learning MT4 and it helps to keep them separate for now. I'm having a little trouble adapting to MT4 from other languages. I'm still thinking in VBA, so it helps to organize things as close to VBA as I can.
I'm hoping that it doesn't make any difference in the script or indicator when I get errors during compiling the include files but no errors when I compile the script file.
A warning is not an error. I think you have no problem.