![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.8
- 回答日時:
回答がいくつも集まっているなか「いまさら」で恐縮ですが、
質問の対象は「関数内で定義するstatic変数」のことでよろしいでしょうか。
C言語のstatic変数と紛らわしいものに、static外部変数とC++のstaticメンバ変数がありますので・・・
static int aaa=-1; /* static外部変数 */
void func(){
static int bbb=-1; /* これがstatic変数*/
}
class Foo{
static int ccc; // C++のstaticメンバ変数
};
static int Foo::ccc=-1; // C++のstaticメンバ変数
この回答への補足
やりたかったのは上から2つ目の
関数の中のstatic変数です。
>void func(){
> static int bbb=-1; /* これがstatic変数*/
>}
No.6
- 回答日時:
> 処理系:Borland C++ Compiler 5.5
の場合、memsetはそんなに高速ではありません。
ここは、mainの最初の辺りで、
for (i = 0; i < 1000; i++) a[i] = -1;
とするのが、速度的にも、サイズ的にも、また移植性の面でも、最適だと思うのですがいかがでしょうか?
No.5
- 回答日時:
ご質問は、変数の初期化方法ではなく、初期値を持つ変数の定義方法に
ついてだと思います。
解答というより、改善案として3つの方法がよいかと思います。
1)未初期化変数として、プログラムの最初で初期化
memset(a,-1,sizeof(a));
# すでに解答済みのものと同じですが
2)定数定義にする。
const static int a[1000] = {-1, -1, /* ひたすら書く*/
/* #defineで簡易に書いても可能*/
3)アセンブリ言語で書く(質問のカテゴリーと違ってますが)
data セグメントを指定して DUPというのを使う
例)(コンパイラのプリフィックスが_の場合)
_a: dd 1000 dup (-1)
理由については、PCレベルの場合はあまり関係ないかもしれませんが
(組込みでは、重要だと思います)
速度とメモリ効率のため3つ提案しています。
初期化変数の場合は、main()にくるまでのスタートアップと呼ばれる部分で
初期化します。そのときにコンパイラによりますが、ROM領域に設定データ
を定義したものからmemcpy相当の処理を行ないます。(ROM領域というより、
固定データ領域) ですので、1)の方が速く、固定データ
領域も使いません。
この辺はコンパイラによるので、ひょっとしたら、同一データとしてmemset
をする賢い処理系があるかもしれません。
さらに、もし、初期化データを変更しない場合は、constといれれば、
ローディング時にプログラムと同様に初期化されるので、プログラム上で処理されない
ため、速度的に有利に、さらに(貴重な?)RAMは使用されなくなります。
最後3)のアセンブリ言語を使う場合はローディング時に初期化されます。最もリソースが
少なくて済む場合です。DUPで、繰り返し定義ができるようです。
指示命令(擬似命令ともいう)はプロセッサ依存ではなく、アセンブラ依存つまり
処理系依存ですが、NASM32では、DUPは使えるようです。URLからダウンロードできるようです。
参考URL:http://www.codingcrew.de/masm32/index.php
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ALGOL・PL/Iのフリーのコンパイ...
-
printfなど、標準関数のソース...
-
C++でデスクトップGUIアプリ開...
-
C言語の勉強をしたいのですが ...
-
変数の内容がコロコロ変わる、...
-
PICマイコンを使用した赤外線簡...
-
ソフトの開発言語を調べる方法
-
cc と gcc の違い
-
Visual Studio でmakefileを使...
-
Win32のIME制御について
-
Σの計算について
-
long long型について
-
C言語:おすすめの書籍とコン...
-
組み込みソフト。ROM領域にデータ
-
静的変数の大量な要素を初期化...
-
visual C++について教えて下さい。
-
PICでのI2C通信でのマスタ、ス...
-
python エラー
-
エクセルのエラーメッセージ「4...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
unsigned long long 型のフォー...
-
ソフトの開発言語を調べる方法
-
cc と gcc の違い
-
printfなど、標準関数のソース...
-
パーサとコンパイラの違いって?
-
COBOLのALPHABET...
-
Visual Studio でmakefileを使...
-
組み込みソフト。ROM領域にデータ
-
リリースモードとデバッグモー...
-
C++Builder → Visual C++ 移植...
-
C++でデスクトップGUIアプリ開...
-
サイクルカウントの方法
-
VisualC++6.0でのProfessionalE...
-
COBOLの論理演算子について質問...
-
関数形式マクロ dtaは戻り値が...
-
C言語の2進数表記
-
POWERCOBOLのSQL...
-
Σの計算について
-
C言語の規格
-
COBOL計算式の中間ワーク桁数に...
おすすめ情報