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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

8633閲覧

C++でのuint,ulongについて

epochster

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/04/11 05:31

編集2019/04/11 08:28

前提・実現したいこと

C++初心者です。
符号なし整数型について質問があります。

符号付き整数は int, long, long long
符号なし整数は unsigned int, ~
のように記述することはわかりました。

しかし、いちいち unsigned ~ とするのは面倒と思い、uint, ulongと書いてみたところ正常にコンパイルできました。
どうやらどこかで
typedef unsigned int uint
typedef unsigned long ulong
のような定義がされているようなのですが、教科書にはこのような符号なし整数の記法は出てきませんでしたし、ググってもよくわかりませんでした。
この符号なし整数の記法は標準的なものですか?
それともコンパイラ依存ですが多くのコンパイラで定義されているものなのでしょうか。

試したこと

試したコンパイラはgnuとintelです。
g++、icpcともにコンパイルできました。

ソースコード

cpp

1#include <iostream> 2 3int main() { 4 uint foo = 4294967295; 5 ulong bar = 18446744073709551615u; 6 7 std::cout << foo << std::endl; 8 std::cout << bar << std::endl; 9}

補足情報

環境はubuntu(WSL)です。

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

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

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

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

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

cateye

2019/04/11 05:56 編集

コンパイルしたソースを上げて下さい。ソースがなければ、インクルードファイルも何もわかりません。 (普通にiostreamのインクルードだけでは、Linuxでgccやclangでコンパイルするとulong型はエラーになります)
epochster

2019/04/11 08:41

iostreamのみのインクルードで、当方の環境では実行できました。 (接尾辞"u"をつけないと、ulongではgccにwarningされました) 環境によるところが大きいようですね。
cateye

2019/04/11 09:46 編集

なるほど・・・ >環境によるところが大きい・・・みたいですね。 こちらだと、/usr/include/x86_64-linux-gnu/sys/types.hに #ifdef __USE_MISC /* Old compatibility names for C types. */ typedef unsigned long int ulong; typedef unsigned short int ushort; typedef unsigned int uint; #endif って、定義されているようです。
guest

回答3

0

最近のgccは親切ですね。

cpp

1#include <iostream> 2 3typedef float uint;

とエラーを起こせば、ちゃんと教えてくれます。

hoge.cpp:3:15: error: conflicting declaration ‘typedef float uint’ typedef float uint; ^~~~ In file included from /usr/include/stdlib.h:394, from /usr/include/c++/8/cstdlib:75, from /usr/include/c++/8/ext/string_conversions.h:41, from /usr/include/c++/8/bits/basic_string.h:6391, from /usr/include/c++/8/string:52, from /usr/include/c++/8/bits/locale_classes.h:40, from /usr/include/c++/8/bits/ios_base.h:41, from /usr/include/c++/8/ios:42, from /usr/include/c++/8/ostream:38, from /usr/include/c++/8/iostream:39, from hoge.cpp:1: /usr/include/x86_64-linux-gnu/sys/types.h:150:22: note: previous declaration as ‘typedef unsigned int uint’ typedef unsigned int uint; ^~~~

上記のエラーはubuntuですが、cygwinのsys/types.hには、「System V compatibility」というコメントが書いてあったので、古いUNIXへの互換性のための定義かと思います。

投稿2019/04/11 06:01

katsuko

総合スコア3471

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

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

epochster

2019/04/11 08:37

たしかに、Intellisenseも互換性のためのようなことを言ってきました。 使うにしても自分で定義してからのほうがよさそうですね。 ありがとうございます。
guest

0

ベストアンサー

Visual Studio 2019 で確認してみたところ、uint 型は定義されていないようです。

標準仕様としては、stdint.h で定義されている以下の型が使用できますので、特に理由がなければ uint 型は使わない方が無難かと思います。

C++

1typedef signed char int8_t; 2typedef short int16_t; 3typedef int int32_t; 4typedef long long int64_t; 5typedef unsigned char uint8_t; 6typedef unsigned short uint16_t; 7typedef unsigned int uint32_t; 8typedef unsigned long long uint64_t; 9 10typedef signed char int_least8_t; 11typedef short int_least16_t; 12typedef int int_least32_t; 13typedef long long int_least64_t; 14typedef unsigned char uint_least8_t; 15typedef unsigned short uint_least16_t; 16typedef unsigned int uint_least32_t; 17typedef unsigned long long uint_least64_t; 18 19typedef signed char int_fast8_t; 20typedef int int_fast16_t; 21typedef int int_fast32_t; 22typedef long long int_fast64_t; 23typedef unsigned char uint_fast8_t; 24typedef unsigned int uint_fast16_t; 25typedef unsigned int uint_fast32_t; 26typedef unsigned long long uint_fast64_t; 27 28typedef long long intmax_t; 29typedef unsigned long long uintmax_t;

投稿2019/04/11 07:01

nskydiving

総合スコア6500

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

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

epochster

2019/04/11 08:10

なるほど、Microsoft Visual C++では定義されてないのですね。ありがとうございます。
guest

0

stdint.hにて定義されています。

投稿2019/04/11 05:52

編集2019/04/11 05:56
asm

総合スコア15147

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問