最近看了一下C语言中 Define 的用法,这个可以看成是C 语言的宏定义,在使用时会进行展开。从这个角度来说,可以用它实现编译过程中自动删除代码的功能。
比如下面的代码中,当定义LAB_APP_DEBUG 1 后,编译过程中 zPrint 会被解释成为 “\\” 这样对应的一行就会被注释掉。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <Uefi.h> #include <Library/BaseLib.h> #include <Library/UefiLib.h> #include <Library/ShellCEntryLib.h> #include <stdio.h> #include <stdlib.h> #define LAB_APP_DEBUG 1 #if defined(LAB_APP_DEBUG) #define zPrint Print #else #define zPrint /\ / #endif INTN EFIAPI main ( IN UINTN Argc, IN CHAR8 **Argv ) { zPrint( L"StringAAAA\n" ); zPrint( L"StringBBBB\n" ); return EFI_SUCCESS; } |

此外,EDK2 中一些宏将一些函数定义为空,在编译时通过当前时 DEBUG 还是 REALSE 进行区分,可以做到和上面相同的效果。