質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

5回答

10404閲覧

long int と long の処理の違いは?!?!?!??!

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/04/24 13:04

編集2016/04/24 13:19

c

1/* long に限らず! */ 2 3long int longintchan = 1234567890L; /* Lは必要? */ 4long longintchan = 1234567890L; 5

型名を省略した場合、内部での処理は型名をちゃんと指定した場合と、何か異なるのですか?
省略したときと、しなかったときの利点、欠点はなんですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサーが出ていますが、なんかちょっと違うと思ったので。

long intlong別表記であって、全く同じです。コンパイラは全く同じ物として扱います。他にもsigned longsigned long int別表記であって、全く同じです。これはintやsignedが省略されているとか、省略できるというものでは決してありません。singnedやintは型の一部であり、切り離すことはできません。たとえば、charsigned charは厳密に区別されます。また、型を省略した場合、intと見なすという暗黙のintというルールがかつてありましたが、C11では削除されています

次にLですが、この場合は付けなくてもかまいません。なぜなら、C言語ではintに収まらない10進数の整数リテラルはlongまたはlong long勝手に昇格します。たとえ、intのままであっても、intからlongへ絶対に失敗しないキャストが行われるため、影響はありません。ただし、8進数整数リテラルと16進数整数リテラルはunsignedを挟んで昇格するなど、注意点が多いため、Lを付けておいた方がいいと思います。
longになるかlong longになるかはそれぞれのサイズがintと比べてどれだけ大きいかになるため、処理系によります。

投稿2016/04/24 15:20

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chironian

2016/04/24 15:54

> C言語ではintに収まらない10進数の整数リテラルはlongまたはlong longに勝手に昇格します。 おお、そうなのですか!! 情報ありがとうございます。 ところで、C++言語ではどうなります? 同じなら問題ないですが、もし、異なるなら把握しとかないと嵌りそうな知識なので。
otn

2016/04/24 16:32

確かに。回答で例に挙げた static x; だとか、戻り値の型を書かない関数定義だと、intが省略されていると思いますが、long x; もそれと同様というトーンで回答したのはまずかった気がします。
Chironian

2016/04/25 00:57

raccyさん。 ありがとうございます。C++でも同じように定義されているのですね。
退会済みユーザー

退会済みユーザー

2016/04/25 04:53 編集

ありがとうございます!! 暗黙の型変換がC11で消されたというのは初耳でした!!! 勉強になりました????
guest

0

こんにちは。

型名を省略した場合、内部での処理は型名をちゃんと指定した場合と、何か異なるのですか?

変わらないです。コンパイラは省略していない型で認識してます。

省略したときと、しなかったときの利点、欠点はなんですか?

省略したら、ソースがちょっとだけ短くなることですね。意味なく長いと見にくくなることが多いので私はほぼ常に省略してます。

数値リテラルの最後のLはlong型のリテラルであることを示します。
intで表現できずlongで表現できるような数値リテラルを書きたい時は省略してはいけません。
int型で表現できる時は省略しても実害が発生するケースはあまり無いだろうと思います。
(負の数を正の値で記述するなどのちょっと無理やりなことをしないかぎり。)


Lの必要性に関して訂正】

intで表現できずlongで表現できるような数値リテラルを書きたい時は省略してはいけません。

「省略してはいけません。」ということはないようです。
raccyさんの回答を見ていただくのが早いですが、数値リテラルは自動的に昇格されます。

しかし、raccyさんも書かれているように、unsignedがらみで落とし穴があります。
きじねこ「第5回 int 型のサイズ」が分かりやすく解説してました。)

恐らく、便利のための機能ではなくマルチ・プラットフォーム対応のための機能ではないかと思います。
処理系によってintやlongのサイズは異なりますので、数値リテラルがlongになるかどうかは処理系依存です。従って、マルチ・プラットフォーム対応する時に適切につけることは難易度高いです。

マルチ・プラットフォーム対応しないなら、明示的に指定しておいた方が落とし穴にはまる心配をしなくてよさそうです。
マルチ・プラットフォーム対応する時は、下手に指定できないため、注意深く落とし穴を避けるしかなさそうです。
たぶん、処理系によって型が異なるような大きな数値リテラルをなるべく使わないことですね。
各型で表現できる最大/最小は<limits.h>(C言語)や<limits>(C++言語)に定義されてます。
1パイトが8ビット以上は保証されてますので、1バイトで表現できる値(±127まで)は安全ですね。
実際にint型が1バイトな処理系はほとんど無い(もしかすると規格で禁止?)でしょうから、±32767までは事実上安全でしょう。

投稿2016/04/24 13:40

編集2016/04/25 01:47
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/04/24 14:06

ありがとうございます! ちゃんと考えて省略しないと読みづらくなるのですね >_<
guest

0

ベストアンサー

省略しても構文が変わらない限り、int は省略可能です。同じ意味です。

C

1static x; /* static int x; の意味 */

とか。また、警告は出ると思いますが、関数の外のグローバル変数の場合、

C

1x; /* int x; の意味 */

と書けます。
書けるだけであって、普通はそう書かないでしょう。

投稿2016/04/24 13:36

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/04/24 14:03

ありがとうございます!! x; と書けることが知れて本当によかったです。 勉強になりました!!! ありがとうございます!!!
guest

0

全く同じです。違いはありません。強いて言えば「めんどくささ」でしょうか。

--追記
考えてみれば私もunsignedunsigned intとintを略さないタイプですので、人により好みで、あるいはルールがあればルールに従う、で良いのかなと思います。

といってもlongで済むところをauto signed long intと書かれていると、人によっては違和感を感じるかもしれません(例えば私)。

投稿2016/04/24 13:28

編集2016/04/24 13:43
sharow

総合スコア1149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/04/24 14:06

ありがとうございます!! 読みやすさを考えたらいいのですね????
guest

0

C++も同じっぽいです。(膨大な仕様書までは確認できてませんけど…)
http://en.cppreference.com/w/cpp/language/integer_literal#The_type_of_the_literal


あ、コメントに書く内容を回答にかいちゃった。削除依頼って出せるっけかな。

投稿2016/04/24 21:58

編集2016/04/24 22:00
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問