最近看了一下C语言中 Define 的用法,这个可以看成是C 语言的宏定义,在使用时会进行展开。从这个角度来说,可以用它实现编译过程中自动删除代码的功能。
比如下面的代码中,当定义LAB_APP_DEBUG 1 后,编译过程中 zPrint 会被解释成为 “\\” 这样对应的一行就会被注释掉。
#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 进行区分,可以做到和上面相同的效果。