teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

更に微修正

2016/04/29 03:37

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -10,6 +10,7 @@
10
10
  ---
11
11
  【追記】
12
12
  rawは3次元配列で、しかも、最下位の次元を可変長にしたいのですか...
13
- C/C++ではそれも不可能です。例えば、value[0][1][0]のアドレス静的に決定できませんので。静的型付け言語では不可能と思います。
13
+ C/C++ではそれも不可能です。例えば、value[0][1][0]のアドレス静的に決定できませんので。
14
+ 静的型付け言語で、変数領域を連続領域に「動的」に割り当てすることは不可能と思います。
14
15
 
15
16
  不連続な領域、もしくは、ポインタ経由するような方法でならC/C++も含めて対応できる言語は多いと思いますが、連続領域に直接動的に割り当てることが可能な言語は少ないだろうと思います。

4

typo

2016/04/29 03:37

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  例外的にCではスタック上に確保する場合に限りサポートしているようです。(VLA)
5
5
  gccはそれをもう少し拡張拡張して構造体内の配列を可変長にできるようです([VLAIS](http://cpplover.blogspot.jp/2013/04/llvmclanglinuxgcc.html))が、やはりスタック上に確保した例しか見当たりません。
6
6
 
7
- 旧来からよく使われる長さ0の配列を構造体の最後に配置するテクニックを使うしかないように思います。(ItoTomonoriさんが回答されている方法です。)
7
+ 旧来からよく使われる長さ1の配列を構造体の最後に配置するテクニックを使うしかないように思います。(ItoTomonoriさんが回答されている方法です。)
8
8
  rawを適切な位置へ配置することはできませんが、C/C++言語は[静的型付け](https://ja.wikipedia.org/wiki/%E9%9D%99%E7%9A%84%E5%9E%8B%E4%BB%98%E3%81%91)言語ですので、これは不可能と思います。rawの位置が動的に変化しますので、動的に処理するしかありません。
9
9
 
10
10
  ---

3

補足

2016/04/29 03:33

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  gccはそれをもう少し拡張拡張して構造体内の配列を可変長にできるようです([VLAIS](http://cpplover.blogspot.jp/2013/04/llvmclanglinuxgcc.html))が、やはりスタック上に確保した例しか見当たりません。
6
6
 
7
7
  旧来からよく使われる長さ0の配列を構造体の最後に配置するテクニックを使うしかないように思います。(ItoTomonoriさんが回答されている方法です。)
8
- rawを適切な位置へ配置することはできませんが、C/C++言語は静的型付け言語ですので、これは不可能と思います。rawの位置が動的に変化しますので、動的に処理するしかありません。
8
+ rawを適切な位置へ配置することはできませんが、C/C++言語は[静的型付け](https://ja.wikipedia.org/wiki/%E9%9D%99%E7%9A%84%E5%9E%8B%E4%BB%98%E3%81%91)言語ですので、これは不可能と思います。rawの位置が動的に変化しますので、動的に処理するしかありません。
9
9
 
10
10
  ---
11
11
  【追記】

2

更に追記

2016/04/29 03:32

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -5,4 +5,11 @@
5
5
  gccはそれをもう少し拡張拡張して構造体内の配列を可変長にできるようです([VLAIS](http://cpplover.blogspot.jp/2013/04/llvmclanglinuxgcc.html))が、やはりスタック上に確保した例しか見当たりません。
6
6
 
7
7
  旧来からよく使われる長さ0の配列を構造体の最後に配置するテクニックを使うしかないように思います。(ItoTomonoriさんが回答されている方法です。)
8
- rawを適切な位置へ配置することはできませんが、C/C++言語は「静的型付けな言語」ですので、これは不可能と思います。rawの位置が動的に変化しますので、動的に処理するしかありません。
8
+ rawを適切な位置へ配置することはできませんが、C/C++言語は「静的型付けな言語」ですので、これは不可能と思います。rawの位置が動的に変化しますので、動的に処理するしかありません。
9
+
10
+ ---
11
+ 【追記】
12
+ rawは3次元配列で、しかも、最下位の次元を可変長にしたいのですか...
13
+ C/C++ではそれも不可能です。例えば、value[0][1][0]のアドレスが静的に決定できませんので。静的型付け言語では不可能と思います。
14
+
15
+ 不連続な領域、もしくは、ポインタ経由するような方法でならC/C++も含めて対応できる言語は多いと思いますが、連続領域に直接動的に割り当てることが可能な言語は少ないだろうと思います。

1

追記

2016/04/29 03:28

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -4,5 +4,5 @@
4
4
  例外的にCではスタック上に確保する場合に限りサポートしているようです。(VLA)
5
5
  gccはそれをもう少し拡張拡張して構造体内の配列を可変長にできるようです([VLAIS](http://cpplover.blogspot.jp/2013/04/llvmclanglinuxgcc.html))が、やはりスタック上に確保した例しか見当たりません。
6
6
 
7
- 旧来からよく使われる長さ0の配列を構造体の最後に配置するテクニックを使うしかないように思います。
7
+ 旧来からよく使われる長さ0の配列を構造体の最後に配置するテクニックを使うしかないように思います。(ItoTomonoriさんが回答されている方法です。)
8
8
  rawを適切な位置へ配置することはできませんが、C/C++言語は「静的型付けな言語」ですので、これは不可能と思います。rawの位置が動的に変化しますので、動的に処理するしかありません。