Is it possible to use #define inside a function?

前端 未结 6 1891
野性不改
野性不改 2021-01-07 22:38

For example, I saw source code like the following. Can we use #define in a function? How does it work? (more information: this code is what I copied from

相关标签:
6条回答
  • 2021-01-07 22:45

    You can use it inside a function, but it is not scoped to the function. So, in your example, the second definitions of a macro will be a redefinition and generate an error. You need to use #undef to clear them first.

    0 讨论(0)
  • 2021-01-07 22:47

    How does it work? All C/C++ files are first processed by... the preprocessor.

    It doesn't know anything about C nor C++ syntax. It simply replaces THIS_THING with ANOTHER THING. That's why you can place a #define in functions as well.

    0 讨论(0)
  • 2021-01-07 22:50

    #define is a preprocessor directive: it is used to generate the eventual C++ code before it is handled to the compiler that will generate an executable. Therefore code like:

    for(int i = 0; i < 54; i++) {
      #define BUFFER_SIZE 1024
    }
    

    is not executed 54 times (at the preprocessor level): the preprocessor simply runs over the for loop (not knowing what a for loop is), sees a define statement, associates 1024 with BUFFER_SIZE and continues. Until it reaches the bottom of the file.

    You can write #define everywhere since the preprocessor is not really aware of the program itself.

    0 讨论(0)
  • 2021-01-07 23:05

    Sure this is possible. The #define is processed by the preprocessor before the compiler does anything. It is a simple text replacement. The preprocessor doesn't even know if the line of code is inside or outside a function, class or whatever.

    By the way, it is generally considered bad style to define preprocessor macros in C++. Most of the things they are used for can be better achieved with templates.

    0 讨论(0)
  • 2021-01-07 23:05

    Sure. #define is handled by the preprocessor which occurs well before the compiler has any sense of lines of code being inside functions, inside parameters lists, inside data structures, etc.

    Since the preprocessor has no concept of C++ functions, it also means that there is no natural scope to macro definitions. So if you want to reuse a macro name, you have to #undef NAME to avoid warnings.

    0 讨论(0)
  • 2021-01-07 23:08

    You can use #define anywhere you want. It has no knowledge of functions and is not bound by their scope. As the preprocessor scans the file from top-to-bottom it processes #defines as it sees them. Do not be misled (by silly code like this!) into thinking that the #define is somehow processed only when the function is called; it's not.

    0 讨论(0)
提交回复
热议问题