C言語での.hファイルの異常な使用について
質問
フィルタリングに関する記事を読んでいて、いくつかの奇妙な使い方を発見しました。
.h
ファイル - 係数の配列を埋めるためにそれを使用します。
#define N 100 // filter order
float h[N] = { #include "f1.h" }; //insert coefficients of filter
float x[N];
float y[N];
short my_FIR(short sample_data)
{
float result = 0;
for ( int i = N - 2 ; i >= 0 ; i-- )
{
x[i + 1] = x[i];
y[i + 1] = y[i];
}
x[0] = (float)sample_data;
for (int k = 0; k < N; k++)
{
result = result + x[k]*h[k];
}
y[0] = result;
return ((short)result);
}
では、普通に考えて
float h[N] = { #include "f1.h" };
を使うのが普通なのでしょうか?
どのように解決するのですか?
プリプロセッサー
のようなディレクティブは
#include
は、単に
テキスト
を置換しているだけです (GNUの
cpp
内部
GCC
). コメントと文字列リテラルの外側の)どの場所でも発生することができます。
しかし
#include
は、その
#
をその行の最初の空白でない文字とする必要があります。ですから、次のようなコードになります。
float h[N] = {
#include "f1.h"
};
元の質問には
#include
を付けていなかったので、間違ったコードになっていました。
これは
通常
を実践していますが、それは
許可されている
の練習をする必要があります。そのような場合には、他の拡張子を使うことをお勧めします。
.h
を使用します。
#include "f1.def"
または
#include "f1.data"
...
コンパイラに前処理されたフォームを表示するように依頼します。とともに
GCC
でコンパイルします。
gcc -C -E -Wall yoursource.c > yoursource.i
でコンパイルし、エディタやページャーで生成された
yoursource.i
私は実際、そのようなデータはそれ自身のソースファイルにある方が好きです。ですから、私は代わりに自己完結型の
h-data.c
ファイルを生成することをお勧めします。
GNU awk
(ですから、ファイル
h-data.c
で始まる場合
const float h[345] = {
で始まり
};
...)
そして、もしそれが定数データであるなら、よりよくそれを宣言してください
const float h[]
(のような読み取り専用のセグメントに置くことができます。
.rodata
のような読み取り専用セグメントに置くことができます)。また、埋め込みデータが大きい場合、コンパイラは(無駄に)最適化するのに時間がかかるかもしれません(その場合、あなたのコンパイルした
h-data.c
を最適化せずに素早くコンパイルすることができます)。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】'cout'は型名ではない
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] C++でifstreamを使用してファイルを一行ずつ読み込む
-
[解決済み] 標準C++/C++11,14,17/Cを使用してファイルが存在するかどうかを確認する最速の方法?
-
[解決済み] .soファイル内のシンボルを一覧表示する方法
-
[解決済み】C/C++のインクルードヘッダーファイルの順番
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる