[cpp.scope] # 15 Preprocessing directives [[cpp]](./#cpp) ## 15.7 Macro replacement [[cpp.replace]](cpp.replace#cpp.scope) ### 15.7.6 Scope of macro definitions [cpp.scope] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2040) A macro definition lasts (independent of block structure) until a corresponding#undef directive is encountered or (if none is encountered) until the end of the translation unit[.](#1.sentence-1) Macro definitions have no significance after translation phase 4[.](#1.sentence-2) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/preprocessor.tex#L2050) A preprocessing directive of the form # undef [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") [*new-line*](cpp.pre#nt:new-line "15.1 Preamble [cpp.pre]") causes the specified identifier no longer to be defined as a macro name[.](#2.sentence-1) It is ignored if the specified identifier is not currently defined as a macro name[.](#2.sentence-2)