スレッド: [cppll:8643] designated initializer
スレッド
- 8643: Linuxのドライバを開発している人から、教えてもらった話。 gccでは、構造体の初期化に変数名 Shin'ya MORINO
- ├8644: 教えてもらった人から、訂正。 struct foo { int a; int b; int c; }; int main() { }; 森野慎也 mailto:smorino@data Shin'ya MORINO
- │├8645: あと, 配列で特定の要素だけ値を指定したいときには int a[5] = { [0] = 1, [3] = 4 }; 名古屋大学大学 Takao Ono
- ││├8648: ちーっす。 このときに、すっとばされた要素の値は、どーなるんだろ.....と思ってました。 gcc Shin'ya MORINO
- ││└8649: 私も識者ではありませんが、 http://seclan.dll.jp/c99d/c99d07.htm#dt19991025 は、いつも参考にしています Osamu Shigematsu
- │└8650: designated initializerとcompound literalを使って名前付き引数もどき。 typedef struct { int x; int y; } arg; } void Satoshi Nakamura
- └8652: 面白そうですね。 個人的には noreturn がいいなぁ。と思ってみたり(^^; ところで、 こっちと と DENCHU
- └8653: ありますねー。(^^ ありゃ、すっ飛ばして書いちゃいました。堪忍。(^^;; struct foo f = { c: 2, b: 1, a: Shin'ya MORINO
- └8656: ほうほう、なるほど。 途中のラベルを抜いたり出来ないのはちと不便ですね。 C99 だといろい DENCHU
[cppll:8643] designated initializer
- Subject:
- [cppll:8643] designated initializer
- From:
- Shin'ya MORINO <smorino@...>
- Date:
- Wed, 07 May 2003 19:36:44 +0900
- Message-Id:
- <3eb8de96.101%smorino‐at‐datamark.co.jp>
森野です。
Linuxのドライバを開発している人から、教えてもらった話。
gccでは、構造体の初期化に変数名をラベルとして使えるそうです。
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_4.html#SEC81
C99にも、designated initializerとして、定義されています。
たとえば、以下のコード、gcc/g++-3.2.2の両者でオッケー。
----------------------------------------------------------
struct foo {
int a;
int b;
int c;
};
int main() {
struct foo f = {
a: 0,
b: 1,
c: 2
};
}
----------------------------------------------------------
ちょっと、ひねって、メンバを省略してみます。
----------------------------------------------------------
struct foo { 上のリストに同じ};
int main() {
struct foo f = {
c: 2
a: 0,
};
}
----------------------------------------------------------
gccでは、OK。g++では、
$ g++ foo.cpp -o foo
foo.cpp:10: 残念ながら見実装です: 自明でないラベルのついた初期化子です。
だそうです。
蛇足ですが、見実装っての、typoじゃありません。
だけど、そこんとこ、なんともいえず、かわゆく思えてしまいます。
-------
森野慎也 mailto:smorino@...
Linuxのドライバを開発している人から、教えてもらった話。
gccでは、構造体の初期化に変数名をラベルとして使えるそうです。
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_4.html#SEC81
C99にも、designated initializerとして、定義されています。
たとえば、以下のコード、gcc/g++-3.2.2の両者でオッケー。
----------------------------------------------------------
struct foo {
int a;
int b;
int c;
};
int main() {
struct foo f = {
a: 0,
b: 1,
c: 2
};
}
----------------------------------------------------------
ちょっと、ひねって、メンバを省略してみます。
----------------------------------------------------------
struct foo { 上のリストに同じ};
int main() {
struct foo f = {
c: 2
a: 0,
};
}
----------------------------------------------------------
gccでは、OK。g++では、
$ g++ foo.cpp -o foo
foo.cpp:10: 残念ながら見実装です: 自明でないラベルのついた初期化子です。
だそうです。
蛇足ですが、見実装っての、typoじゃありません。
だけど、そこんとこ、なんともいえず、かわゆく思えてしまいます。
-------
森野慎也 mailto:smorino@...
[cppll:8644] Re: designated initializer
- Subject:
- [cppll:8644] Re: designated initializer
- From:
- Shin'ya MORINO <smorino@...>
- Date:
- Wed, 07 May 2003 20:37:10 +0900
- Message-Id:
- <3eb8ef73.104%smorino‐at‐datamark.co.jp>
- In-Reply-To:
- 8643
- References:
- 8643
森野です。
Shin'ya MORINOさんの<3eb8de96.101%smorino@datamark.co.jp>から
>Linuxのドライバを開発している人から、教えてもらった話。
教えてもらった人から、訂正。
>C99にも、designated initializerとして、定義されています。
C99では、以下のように書くんだそうで。
# 未確認。識者の意見請う。
----------------------------------------------------------
struct foo {
int a;
int b;
int c;
};
int main() {
struct foo f = {
.a=0,
.b = 1,
.c = 2
};
}
----------------------------------------------------------
-------
森野慎也 mailto:smorino@...
Shin'ya MORINOさんの<3eb8de96.101%smorino@datamark.co.jp>から
>Linuxのドライバを開発している人から、教えてもらった話。
教えてもらった人から、訂正。
>C99にも、designated initializerとして、定義されています。
C99では、以下のように書くんだそうで。
# 未確認。識者の意見請う。
----------------------------------------------------------
struct foo {
int a;
int b;
int c;
};
int main() {
struct foo f = {
.a=0,
.b = 1,
.c = 2
};
}
----------------------------------------------------------
-------
森野慎也 mailto:smorino@...
[cppll:8645] Re: designated initializer
小野@名古屋大学 です.
<3eb8ef73.104%smorino@datamark.co.jp>の記事において
smorino@...さんは書きました。
smorino> >C99にも、designated initializerとして、定義されています。
smorino> C99では、以下のように書くんだそうで。
です.
smorino> # 未確認。識者の意見請う。
# 識者じゃないですが.
あと, 配列で特定の要素だけ値を指定したいときには
int a[5] = {
[0] = 1, [3] = 4
};
なんて書き方もできますね.
--
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男
<3eb8ef73.104%smorino@datamark.co.jp>の記事において
smorino@...さんは書きました。
smorino> >C99にも、designated initializerとして、定義されています。
smorino> C99では、以下のように書くんだそうで。
です.
smorino> # 未確認。識者の意見請う。
# 識者じゃないですが.
あと, 配列で特定の要素だけ値を指定したいときには
int a[5] = {
[0] = 1, [3] = 4
};
なんて書き方もできますね.
--
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男
[cppll:8648] Re: designated initializer
- Subject:
- [cppll:8648] Re: designated initializer
- From:
- Shin'ya MORINO <smorino@...>
- Date:
- Thu, 08 May 2003 09:46:36 +0900
- Message-Id:
- <3eb9a8be.108%smorino‐at‐datamark.co.jp>
- In-Reply-To:
- 8645
- References:
- 8644 8645
森野です。
Takao Onoさんの<030507204321.M0100434@flame.hirata.nuee.nagoya-u.ac.jp>から
>小野@名古屋大学 です.
ちーっす。
>あと, 配列で特定の要素だけ値を指定したいときには
>int a[5] = {
> [0] = 1, [3] = 4
>};
>なんて書き方もできますね.
このときに、すっとばされた要素の値は、どーなるんだろ.....と思ってました。
gcc的には、0に初期化してくれるみたいっす。
-------
森野慎也 mailto:smorino@...
Takao Onoさんの<030507204321.M0100434@flame.hirata.nuee.nagoya-u.ac.jp>から
>小野@名古屋大学 です.
ちーっす。
>あと, 配列で特定の要素だけ値を指定したいときには
>int a[5] = {
> [0] = 1, [3] = 4
>};
>なんて書き方もできますね.
このときに、すっとばされた要素の値は、どーなるんだろ.....と思ってました。
gcc的には、0に初期化してくれるみたいっす。
-------
森野慎也 mailto:smorino@...
[cppll:8649] Re: designated initializer
- Subject:
- [cppll:8649] Re: designated initializer
- From:
- Osamu Shigematsu <m5issige@...>
- Date:
- Thu, 08 May 2003 09:50:46 +0900
- X-Mailer:
- Becky! ver. 2.05.11
- Message-Id:
- <20030508094946.975C.M5ISSIGE‐at‐mr.hitachi-medical.co.jp>
- In-Reply-To:
- 8645
- References:
- 8644 8645
重松です。こんにちは。
私も識者ではありませんが、
http://seclan.dll.jp/c99d/c99d07.htm#dt19991025
は、いつも参考にしています。
--
Osamu Shigematsu <m5issige@...>
私も識者ではありませんが、
http://seclan.dll.jp/c99d/c99d07.htm#dt19991025
は、いつも参考にしています。
--
Osamu Shigematsu <m5issige@...>
[cppll:8650] Re: designated initializer
- Subject:
- [cppll:8650] Re: designated initializer
- From:
- Satoshi Nakamura <watson@...>
- Date:
- Wed, 07 May 2003 17:56:50 -0700
- X-Mailer:
- QMAIL 2.9.0 / Windows 2000 Service Pack 3 / x86
- Message-Id:
- <202420030507175225watson‐at‐zak.att.ne.jp>
- In-Reply-To:
- 8644
- References:
- 8643 8644
中村です。
At 07 May 2003 20:37:10 +0900 Shin'ya MORINO wrote:
> >C99にも、designated initializerとして、定義されています。
> C99では、以下のように書くんだそうで。
designated initializerとcompound literalを使って名前付き引数もどき。
typedef struct {
int x;
int y;
} arg;
void foo(const arg* p) {
// ...
}
void bar() {
foo(&(arg){ .x = 100 });
}
なんていうのを一瞬考えてみたりしましたが、面倒になっているだけのような気も
しますね^^;;
以前にも出たことがあると思いますが、一応ご紹介。
プログラミング言語 C の新機能
<http://seclan.dll.jp/c99d/>
--
Satoshi Nakamura <snak@...>
At 07 May 2003 20:37:10 +0900 Shin'ya MORINO wrote:
> >C99にも、designated initializerとして、定義されています。
> C99では、以下のように書くんだそうで。
designated initializerとcompound literalを使って名前付き引数もどき。
typedef struct {
int x;
int y;
} arg;
void foo(const arg* p) {
// ...
}
void bar() {
foo(&(arg){ .x = 100 });
}
なんていうのを一瞬考えてみたりしましたが、面倒になっているだけのような気も
しますね^^;;
以前にも出たことがあると思いますが、一応ご紹介。
プログラミング言語 C の新機能
<http://seclan.dll.jp/c99d/>
--
Satoshi Nakamura <snak@...>
[cppll:8652] Re: designated initializer
Shin'ya MORINOさんの<3eb8de96.101%smorino@datamark.co.jp>から
>Linuxのドライバを開発している人から、教えてもらった話。
>gccでは、構造体の初期化に変数名をラベルとして使えるそうです。
>http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_4.html#SEC81
面白そうですね。
個人的には noreturn がいいなぁ。と思ってみたり(^^;
ところで、
>int main() {
> struct foo f = {
> a: 0,
> b: 1,
> c: 2
> };
>}
こっちと
>int main() {
> struct foo f = {
> c: 2
> a: 0,
> };
>}
こっちの違いがちょっと分かりません(^^;
(c: 2 は c: 2, の typo だとして)
ところで、gcc にはいろいろな拡張がしてあってちょっとあこがれま
すね。(case の範囲指定とか)
まぁ、Microsoft が似たようなことをやったら、それはそれで批判の
対象なんでしょうけど、ちょっとうらやましかったり。
--
電柱一家
mailto:cppll@...
http://denchu.jp/
>Linuxのドライバを開発している人から、教えてもらった話。
>gccでは、構造体の初期化に変数名をラベルとして使えるそうです。
>http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_4.html#SEC81
面白そうですね。
個人的には noreturn がいいなぁ。と思ってみたり(^^;
ところで、
>int main() {
> struct foo f = {
> a: 0,
> b: 1,
> c: 2
> };
>}
こっちと
>int main() {
> struct foo f = {
> c: 2
> a: 0,
> };
>}
こっちの違いがちょっと分かりません(^^;
(c: 2 は c: 2, の typo だとして)
ところで、gcc にはいろいろな拡張がしてあってちょっとあこがれま
すね。(case の範囲指定とか)
まぁ、Microsoft が似たようなことをやったら、それはそれで批判の
対象なんでしょうけど、ちょっとうらやましかったり。
--
電柱一家
mailto:cppll@...
http://denchu.jp/
[cppll:8653] Re: designated initializer
- Subject:
- [cppll:8653] Re: designated initializer
- From:
- Shin'ya MORINO <smorino@...>
- Date:
- Thu, 08 May 2003 10:17:25 +0900
- Message-Id:
- <3eb9aecd.111%smorino‐at‐datamark.co.jp>
- In-Reply-To:
- 8652
- References:
- 8643 8652
森野です。
DENCHUさんの<E19DZli-0005kI-00@deedlian.denchu.jp>から
> 個人的には noreturn がいいなぁ。と思ってみたり(^^;
ありますねー。(^^
>>int main() {
>> struct foo f = {
>> c: 2
>> a: 0,
>> };
>>}
>
> こっちの違いがちょっと分かりません(^^;
> (c: 2 は c: 2, の typo だとして)
ありゃ、すっ飛ばして書いちゃいました。堪忍。(^^;;
たとえば、ラベルの順序を入れ替えたり
----------------------------
struct foo f = {
c: 2,
b: 1,
a: 0
};
----------------------------
途中のラベル抜いたり
----------------------------
struct foo f = {
a: 0,
c: 2
};
----------------------------
すると、コンパイルしてくれません。
# Cのソースだと、でけるんですが。
-------
森野慎也 mailto:smorino@...
DENCHUさんの<E19DZli-0005kI-00@deedlian.denchu.jp>から
> 個人的には noreturn がいいなぁ。と思ってみたり(^^;
ありますねー。(^^
>>int main() {
>> struct foo f = {
>> c: 2
>> a: 0,
>> };
>>}
>
> こっちの違いがちょっと分かりません(^^;
> (c: 2 は c: 2, の typo だとして)
ありゃ、すっ飛ばして書いちゃいました。堪忍。(^^;;
たとえば、ラベルの順序を入れ替えたり
----------------------------
struct foo f = {
c: 2,
b: 1,
a: 0
};
----------------------------
途中のラベル抜いたり
----------------------------
struct foo f = {
a: 0,
c: 2
};
----------------------------
すると、コンパイルしてくれません。
# Cのソースだと、でけるんですが。
-------
森野慎也 mailto:smorino@...
[cppll:8656] Re: designated initializer
Shin'ya MORINOさんの<3eb9aecd.111%smorino@datamark.co.jp>から
>たとえば、ラベルの順序を入れ替えたり
>途中のラベル抜いたり
ほうほう、なるほど。
途中のラベルを抜いたり出来ないのはちと不便ですね。
C99 だといろいろと拡張されて便利そうなんですよね。
#使おうかなぁ(なにに?)
そういえば、VisualStudio .NET の新しいのが出たんでしたっけ。
会社のマシンにインストールしてみようかな。(暇無いけど)
--
電柱一家
mailto:cppll@...
http://denchu.jp/
>たとえば、ラベルの順序を入れ替えたり
>途中のラベル抜いたり
ほうほう、なるほど。
途中のラベルを抜いたり出来ないのはちと不便ですね。
C99 だといろいろと拡張されて便利そうなんですよね。
#使おうかなぁ(なにに?)
そういえば、VisualStudio .NET の新しいのが出たんでしたっけ。
会社のマシンにインストールしてみようかな。(暇無いけど)
--
電柱一家
mailto:cppll@...
http://denchu.jp/