I have some legacy C++ code that I am trying to understand a bit better. One issue I am getting confused with is this with a line like this:

```
#define LOG_TRACE_ERROR(s)  LOG_traceError( _T(__FILE__), __LINE__, s )

```

which is in a header file. I can see the **LOG\_TRACE\_ERROR** is what the code is calling and it passes it a string, and I can see that **LOG\_traceError** is a function that actually does the work, so I assume this line is mapping the two different names for the function together? What is confusing me is why is the parameter list different (just a string for LOG\_TRACE\_ERROR and (\_T(**FILE**), **LINE**, s ) for LOG\_traceError). Also I cant find **\_*FILE*\_** or **\_*LINE*\_** or **s** defined anywhere so how does the program know what they are?