Square of a number being defined using #define

后端 未结 11 1196
说谎
说谎 2020-11-27 08:06

I was just going through certain code which are frequently asked in interviews. I came up with certain questions, if anyone can help me regarding this?

I am totally

11条回答
  •  清歌不尽
    2020-11-27 08:30

    When you write i=4/square(4), the preprocessor expands that to i = 4 / 4 * 4.
    Because C groups operations from left to right, the compiler interprets that as i = (4 / 4) * 4, which is equivalent to 1 * 4.

    You need to add parentheses, like this:

    #define square(x) ((x)*(x))
    

    This way, i=4/square(4) turns into i = 4 / ((4) * (4)).
    You need the additional parentheses around x in case you write square(1 + 1), which would otherwise turn into 1 + 1 * 1 + 1, which is evaluated as 1 + (1 * 1) + 1, or 3.

提交回复
热议问题