Is #define banned in industry standards?

前端 未结 13 2802
长发绾君心
长发绾君心 2020-12-23 18:52

I am a first year computer science student and my professor said #define is banned in the industry standards along with #if, #ifdef, <

13条回答
  •  执笔经年
    2020-12-23 19:21

    No, #define is not banned. Misuse of #define, however, may be frowned upon.

    For instance, you may use

    #define DEBUG

    in your code so that later on, you can designate parts of your code for conditional compilation using #ifdef DEBUG, for debug purposes only. I don't think anyone in his right mind would want to ban something like this. Macros defined using #define are also used extensively in portable programs, to enable/disable compilation of platform-specific code.

    However, if you are using something like

    #define PI 3.141592653589793

    your teacher may rightfully point out that it is much better to declare PI as a constant with the appropriate type, e.g.,

    const double PI = 3.141592653589793;

    as it allows the compiler to do type checking when PI is used.

    Similarly (as mentioned by John Bode above), the use of function-like macros may be disapproved of, especially in C++ where templates can be used. So instead of

    #define SQ(X) ((X)*(X))

    consider using

    double SQ(double X) { return X * X; }

    or, in C++, better yet,

    template T SQ(T X) { return X * X; }

    Once again, the idea is that by using the facilities of the language instead of the preprocessor, you allow the compiler to type check and also (possibly) generate better code.

    Once you have enough coding experience, you'll know exactly when it is appropriate to use #define. Until then, I think it is a good idea for your teacher to impose certain rules and coding standards, but preferably they themselves should know, and be able to explain, the reasons. A blanket ban on #define is nonsensical.

提交回复
热议问题