数字の後にLを使用するCコードでは、それぞれの数字がLであることをコンパイラーに通知することを知っています。
しかし、私はこれの実用的な使用を見ていません。最近のコンパイラーはまだこの言語構造を使用していますか?
まだユースケースがある場合、それらのケースは何でしょうか?
C言語では、式は裏返しに型付けされます。リテラルには型があります。例えば。 _123
_はintで、_123U
_は符号なしint、_123L
_はlong intなどです。式のタイプは、サブ式のタイプによって異なります。_a + b
_のタイプは、a
およびb
のタイプによって異なります。
ビットをいじるときは、正しい型を保証することが特に重要です。また、intに収まらない大きなリテラル(または式の値を割り当てる変数の型–変換の絞り込みがバグの一般的な原因)にも注意する必要があります。
ただし、長整数のサイズはプラットフォームに依存するため、ほとんどのコードではlong
タイプまたはL
リテラルサフィックスを明示的に使用しないでください。整数と長整数は同じサイズでさえあります。
特定のサイズを必要とする移植可能なコードの場合、C_99の固定幅整数型(_int64_t
_など)を使用する方が適切です。これらには対応するリテラルサフィックスがありません。代わりに、_stdint.h
_のINT64_C(123)
のようなリテラルマクロを使用する必要があります。これらのマクロは、必要に応じて、正しいキャストまたはプラットフォーム依存の型サフィックスを適用します。
C++では、オーバーロードが呼び出されると式のタイプが影響する場合があります。特に_0
_、_'\0'
_、false
とnullptr
は、すべてが「null」であり、ある程度暗黙的に相互に変換可能であるにもかかわらず、動作が大きく異なることがよくあります。