UEFI TIPS: 定义一个注释宏

最近看了一下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;
}

运行结果,第一个是定义了LAB_APP_DEBUG=1的结果,第二个是删除了这定义的结果

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注