What's the difference in practice between inline and #define?

后端 未结 5 1693
遇见更好的自我
遇见更好的自我 2021-02-13 06:47

As the title says; what\'s the difference in practice between the inline keyword and the #define preprocessor directive?

5条回答
  •  再見小時候
    2021-02-13 07:21

    #define is a preprocessor tool and has macro semantics. Consider this, if max(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 increment y more 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.

提交回复
热议问题