将“unsigned Short[8]”传递给“CHAR16 *”类型的参数(又名“short *”)会在指针之间转换为具有不同符号的整数类型

问题描述 投票:0回答:1

我有以下代码:

//#include "stdint.h"

#include "uefi.h"
//#include "efi_libs.h"

void PrintLn(CHAR16* String, EFI_SYSTEM_TABLE* _SystemTable);
void Print(CHAR16* String, EFI_SYSTEM_TABLE* _SystemTable);

EFI_STATUS efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* _SystemTable)
{
    //    SystemTable = _SystemTable;

    _SystemTable->ConOut->Reset(_SystemTable->ConOut, 1);
    _SystemTable->ConIn->Reset(_SystemTable->ConIn, 1);
    _SystemTable->ConOut->SetAttribute(_SystemTable->ConOut, EFI_GREEN);

    Print(L"Welcome", _SystemTable);
    PrintLn(L"Press any key to continue...", _SystemTable);

    EFI_INPUT_KEY key;
    while (_SystemTable->ConIn->ReadKeyStroke(_SystemTable->ConIn, &key) == EFI_NOT_READY);

    return EFI_SUCCESS;
}

void Print(CHAR16* String, EFI_SYSTEM_TABLE* _SystemTable)
{
    _SystemTable->ConOut->OutputString(_SystemTable->ConOut, String);
}

void PrintLn(CHAR16* String, EFI_SYSTEM_TABLE* _SystemTable)
{
    _SystemTable->ConOut->OutputString(_SystemTable->ConOut, String);
    _SystemTable->ConOut->OutputString(_SystemTable->ConOut, L"\r\n");
}

编译时我收到此警告:

src/efi_main.c:17:8:警告:将“无符号短[8]”传递给“CHAR16”类型的参数(又名“short”)会在指向具有不同符号的整数类型的指针之间转换[-Wpointer-sign ] Print(L"欢迎", _SystemTable); ^~~~~~~~~~ src/efi_main.c:7:20:注意:在此处将参数传递给参数“String” void Print(CHAR16 字符串, EFI_SYSTEM_TABLE _SystemTable); ^

现在距离我编写 ANSI C 已经很多年了,我不知道如何消除该警告,有人可以向我解释该警告并告诉我如何修复它吗?

谢谢

我已经尝试研究这个问题,但我没有进一步研究。

c uefi ansi
1个回答
0
投票

您的

Print
接受指向
CHAR16
的指针,即
short
signed short
。然而,
L"Welcome"
产生一个指向
wchar_t
的指针,即
unsigned short
。因此,您尝试将
unsigned short *
传递到
signed short *
参数中,因此会出现警告。

因此,解决方案是更改与字符串相关的函数以接受

wchar_t *
而不是
CHAR16 *
参数,或者更改
CHAR16
的 typedef 以使其兼容,将其设为
unsigned
而不是
signed

© www.soinside.com 2019 - 2024. All rights reserved.