Cプログラム初心者です。よろしくお願いします。
配列dm_dat[1000]の各要素を違う変数名(連続した)DM0からDM999の変数名で再定義したいのですが(グローバル変数として)、#define DM0 dm_dat[0]~#define DM999 dm_dat[999]を実際に入力するのはいやなので、他に簡単にすませる方法はないでしょうか?DM0でなくDM(0)なら#define DM(i) dm_dat[i]とできるのですが・・初心者には難しいです。
どなたか、教えてくださるとありがたいです。
No.4ベストアンサー
- 回答日時:
#2です。
> 回答の方法では変数名の変換になりません。そして関数内で展開しても
> 他で変数DM0から1000は使うのでコンパイルするとエラーになってしまいますが・・グローバル変数としてつかいたいのですが・・
意味がわかりません。
提示したプログラムを実行すれば、DM0からDM999のマクロ定義が出力されますので、それをヘッダファイル(例えばdm_dat.hのような名前にする)として保存し、それを各ソースファイルからインクルードすればよいのです。
回答ありがとうございます。
指示されたプログラムのprintfをfprintfを使用してファイルに展開できました。そこで欲張って、第2の方法としてプリプロセッサだけを使って展開できないでしょうか?
よろしくお願いします。
No.6
- 回答日時:
別解としては「エディタのマクロを使って何とかする」というのもありそうですが....
別に「シーケンサに合わせる」必要性なぞさらさらないのでは? 少なくとも, 「シーケンサに送るデータ上で整合性が取れていれば, プログラム上で合わせなければならない理由は全くない」と思いますがね.
回答ありがとうございます。
ご意見のように無理に合わせる必要性はないかと思います。
ただ、浅学のため自分で色々試してみたのですが、できなくて
専門家ならどうするか勉強のためにも知りたいのですが・・
別解もあったら教えてください。
No.5
- 回答日時:
#2さんの回答は手で書く代わりにプログラムに書かせるという意味です
標準出力をファイルにリダイレクトすれば
#define~
という行が1000行書かれたファイルが作成されます
リダイレクトはコマンドプロンプトなどで
プログラム名 > ファイル名
とすれば良いです
回答ありがとうございます。
欲張って、第2の方法としてプリプロセッサだけを使って展開できないでしょうか?
よろしくお願いします。
No.2
- 回答日時:
コードを自動生成すればよいのでは?
言語は何でもかまいませんが、C言語で書くなら...
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i <= 999; i++)
printf("#define DM%d dm_dat[%d]\n", i, i);
return 0;
}
とでもしておけばよいでしょう。
回答ありがとうございます。
回答の方法では変数名の変換になりません。そして関数内で展開しても
他で変数DM0から1000は使うのでコンパイルするとエラーになってしまいますが・・グローバル変数としてつかいたいのですが・・
よろしくお願いします。
No.1
- 回答日時:
ポインタを使ってみては?
例えば、
int dm_dat[1000]; // と宣言されているとして
int *dm = dm_dat; // としてしまえば、
int i; // このiで配列の要素にアクセスするとして
dm[i] と dm_dat[i] は同じ値。
*(dm + i) でも同じことですよね。
ポインタがなんだかよくわからない場合は、この本がお勧めです。
http://www.amazon.co.jp/%E7%A7%98%E4%BC%9DC%E8%A …
C言語はポインタの理解が最大の難所ですが、マスターすれば強力な武器になります。
早速のご回答ありがとうございます。
ポインタを使っても変数名がDMO~DM999になりません。
変数名をDM0~999で宣言したいのです。その方法がわかりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(IT・Webサービス) slackで初回メッセージを送る時の文言 1 2022/03/31 10:39
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- Instagram Instagramユーザーになってるけど、写真と投稿数だけはそのままって、ブロックって事ですか? I 2 2022/09/07 18:23
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- その他(プログラミング・Web制作) Arduino UNO のC言語 2 2023/04/18 19:42
- その他(恋愛相談) した事のある方や心当たりがある方(出来れば女性の方)に質問です。 2日以上こちらのDM未読なのにこち 2 2023/03/08 15:03
- Instagram InstagramのDMについて特に若い子に質問です。 気になってる子がいます。20歳程年下の子です 1 2022/06/19 12:18
- X(旧Twitter) twitterでDMを送信する方法について 1 2022/04/30 13:14
- その他(暮らし・生活・行事) 「Twitter Blue」に加入する方法を教えてください! どうしてもDMを送りたい相手がいます。 3 2023/07/20 19:15
- YouTube 訴訟の確率 1 2022/09/20 23:24
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
構造体のextern方法
-
C言語の2次元配列 容量が大き...
-
ポインタを使って構造体の配列...
-
C#で構造体の配列を持った構造...
-
int i, int i[1];
-
C言語の課題が出たのですが自力...
-
C言語の配列のコピーについて
-
配列のアドレス部
-
10人分の生徒の英語の点数{32,3...
-
C言語 ファイルの指定された行...
-
C言語の課題丸投げ
-
この変数名はわかりにくいですか?
-
配列の合計値
-
define で 配列
-
二次元配列について
-
2番目の最大値を求める
-
char gyou[1024];でcharの表現...
-
C言語において、 配列要素をひ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報