As the title says; what’s the difference in practice between the inline keyword and the #define preprocessor directive?
As the title says; what’s the difference in practice between the inline keyword and
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
#defineis a preprocessor tool and has macro semantics. Consider this, ifmax(a,b)is a macro defined as#define max(a,b) ((a)>(b)?(a):(b)):Ex 1:
val = max(100, GetBloodSample(BS_LDL))would spill extra innocent blood, because the function will actually be called twice. This might mean significant performance difference for real applications.Ex 2:
val = max(3, schroedingerCat.GetNumPaws())This demonstrates a serious difference in program logic, because this can unexpectedly return a number which is less than 3 – something the user would not expect.
Ex 3:
val = max(x, y++)might incrementymore than one time.With inline functions, none of these will happen.
The main reason is that macro concept targets transparency of implementation (textual code replace) and inline targets proper language concepts, making the invocation semantics more transparent to the user.