A macro replaces the original text in the code before the compiler start to process the file. I.e. every single place where you use the macro will get a duplicate of the code.
A function is a complete section of code i.e. no duplication occur.
Consider macros to be evil and stick to using functions instead, at least until you have a LOT of programming experience. There is no end in how many hard to solve issues you can create for yourself with the use of macros...
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by
definition, not smart enough to debug it.
- Brian W. Kernighan
No: From the call alone, it is not possible to know if you are using a macro, a function, or an object's operator().
However, there is a very widespread coding practice that says that macros should be in ALL_CAPS:
DO_SOMETHING(); //Probably a macro
do_something(); //Probably a function
Is your question related to IO?
Read this C++ FAQ LITE article at parashift by Marshall Cline. In particular points 1-6.
It will explain how to correctly deal with IO, how to validate input, and why you shouldn't count on "while(!in.eof())". And it always makes for excellent reading.
Another downside to macros is that they don't obey the C++ scoping rules.
ANYTHING that matches the macro name is replaced by the pre-processor.
Anybody who has named a member function GetMessage when using Windows and MFC will know what I mean.
(The preprocessor will replace ANY GetMessage with GetMessageA or GetMessageW, depending on whether the setup is ASCII or Unicode. The compiler will then complain that your class doesn't contain a definition of one of these! )
"It doesn't matter how beautiful your theory is, it doesn't matter how smart you are. If it doesn't agree with experiment, it's wrong."
Richard P. Feynman