Ada-关于“ mod 64”类型定义的编译器警告

我需要一个有效值在0到63之间(含0和63)的模块化整数类型。例如...

type Mix_Byte is mod 64;

这确实可以按预期进行编译和工作,但是编译器有助于我将注意力吸引到我这一点上可能的疏忽中。

warning: 2 ** 64 may have been intended here

碰巧的是我根本不打算这样做,但是很高兴知道编译器正在监视:)

似乎只对值32或64发出此警告,而不对8、16或128发出警告。我知道32和64是常见的整数大小,在这种情况下,2 ** n才有意义。

对于该特定实例,我该如何沉默该特定的编译器警告(我想在整个项目中全局允许它,以防万一我在其他地方犯了真正的错误)。

我想我可以用不同的方式表达代码,以便更准确地表达我的意思?

hy19851223 回答:Ada-关于“ mod 64”类型定义的编译器警告

您可以尝试将其写为2的幂:

type Mix_Byte is mod 2**6;

编辑:

或者,(基于您评论中的更多信息) 您可以使用命名数字作为模数:

Modulus : constant := 64;
type Mix_Byte is mod Modulus;
,

一些其他背景信息(除了egilhh的答案):检查是在freeze.adb中完成的(请参见here)。可以使用-gnatw.m/.M.启用/禁用警告(请参见gnatmake --help的输出)。您可以使用Warnings编译指示暂时禁用警告(另请参见herehere):

main.adb

procedure Main is

   pragma Warnings (Off,"*may have been intended here");
   type Mix_Byte_1 is mod 64;
   pragma Warnings (On,"*may have been intended here");

   type Mix_Byte_2 is mod 64;   --  Line 7

begin
   null;
end Main;

输出(咬)

$ gcc -c main.adb
main.adb:7:27: warning: 2 ** 64 may have been intended here
本文链接:https://www.f2er.com/3132836.html

大家都在问