web-dev-qa-db-ja.com

Cで数字リテラルの後に「L」文字を使用する使用例はありますか?

数字の後にLを使用するCコードでは、それぞれの数字がLであることをコンパイラーに通知することを知っています。

しかし、私はこれの実用的な使用を見ていません。最近のコンパイラーはまだこの言語構​​造を使用していますか?

まだユースケースがある場合、それらのケースは何でしょうか?

6
yoyo_fun

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'_、falsenullptrは、すべてが「null」であり、ある程度暗黙的に相互に変換可能であるにもかかわらず、動作が大きく異なることがよくあります。

14
amon