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

Types Ada-编译器关于“的警告”;mod 64“;类型定义,types,syntax,ada,Types,Syntax,Ada,我需要一个有效值介于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是有意义的 如何使这个特定实例的特定编译器警告静音

我需要一个有效值介于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
是有意义的

如何使这个特定实例的特定编译器警告静音(我希望在我的项目中全局允许它,以防我在其他地方犯了真正的错误)


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

你可以试着用二的幂来写:

type Mix_Byte is mod 2**6;
编辑:

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

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

一些额外的背景信息(除了egilhh的回答):检查是在
freeze.adb
中完成的(请参阅)。可以使用
-gnatw.m/.m.
启用/禁用警告(请参阅
gnatmake--help的输出)。您可以使用
Warnings
pragma临时禁用警告(另请参见和):

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;
输出(gnat)


有趣的是,我正在做的项目是从Knuth的书TAOCP中的“Mix”计算机派生出来的。其中一个字节有一个未指定的大小,实现者可以自由选择任何方便的大小,其中字节_Max在63到100之间。你的答案适用于最初提出的问题。我希望有一种不使用
2**
符号的方式来表达这一点,但这只是出于一些神秘的原因。很抱歉从这个答案中删除“接受”并将其交给@DeeDee。正如问题所写的“我如何使这个特定的编译器警告保持沉默……”迪迪的回答完全正确。我更喜欢您的
2**6
解决方案来满足我的特殊需求,我将在我的项目中使用它,非常感谢。
$ gcc -c main.adb
main.adb:7:27: warning: 2 ** 64 may have been intended here