1

C#を使用してコンパイルされたCプログラムからデバッグ情報を抽出しようとしていますが、グローバル変数を格納する必要があります。

変数がある場合:

const unsigned char * volatile MyVariable;

変数の名前はMyVariableになり、タイプはunsignedcharになります。何が定数揮発性になりますか。それらはタイプの一部ですか?

クラスで変数を表現する必要があり、それを構築する方法に迷っています。これは私が今それを表現した方法です:

public class MyVariable
{
     public string Name;
     public string Type;

     public bool IsArray;
     public bool IsPointer;
     public bool IsConstant;
     public bool IsVolatile;
     // etc...

     public int Size; // in bytes
}

タイプの一部を作成する必要がvolatileありますか?const彼らは何ですか?属性?

編集

申し訳ありませんが、私は自分自身を正しく説明しなかったと思います。私の質問は、MyVariableクラスをどのように構築する必要があるかということでした。constキーワードが変数と揮発性に対して何をするかを知っています。たとえば、複数のスレッドからアクセスされる変数を作成するときに、volatileキーワードを使用します。

とにかく、答えに基づいて、クラスを次のように構築する必要があります。

public class MyVariable
{
     public string Name;
     public string Type;

     public string[] TypeQualifiers;

     public int Size; // in bytes
}

ここで、TypeQualifiersはそれらのキーワード(型修飾子)の配列になります。助けてくれてありがとう。

4

3 に答える 3

1

最新のオンラインC標準のセクション6.7(宣言)を読むことから始めます。

例のように、フラットなデータ構造でC宣言構文のすべてのニュアンスをキャプチャするのは難しいでしょう。「タイプ」の概念は、次のようにかなり複雑になる可能性があります。

int *(*(*f[N])())[M];

ここで、fタイプは「関数へのポインタのN要素配列」へのポインタのM要素配列へのポインタを返しますint。実際のコードではおそらく不快なものは見られないでしょうが、宣言から型情報を抽出することの難しさを示しています。

于 2012-06-27T16:18:04.733 に答える
1

constvolatileは両方とも型修飾子ですが、完全に独立しています。

キーワードはconst、オブジェクトまたは変数をコード内で変更できないことを指定します。

修飾子は、データのvolatile値がコンパイラの制御または検出の範囲外の方法で変更される可能性があることを宣言し、コンパイラがコードに最適化を適用できないようにします (オブジェクトの値をメモリではなくレジスタに格納するなど)。かわった)。

const現在のコードで変更されないことが保証されていることを意味しますvolatileが、外部から変更できないことを意味するわけではありません。


EDIT :補足として、unsignedは C の型修飾子であり、signedと と同じlongです。タイプ自体 ( 、、など...)に加えて、 、など
の独立したタイプ フィールドも用意することをお勧めします。IsSignedIsUnsignedIsLongintchar

于 2012-06-27T15:58:17.033 に答える
1

Yout プロジェクトでは、C にあまり慣れていないようで、適切な言語リファレンスが手元にないため、問題が発生する可能性があります...

constvolatileおよびrestrict「型修飾子」です。たとえば、unsigned char修飾されていない型です。修飾子は、メモリの処理方法に関する追加のヒントをコンパイラに提供します。ほぼあらゆる組み合わせで取り付けることができます。

于 2012-06-27T15:51:32.973 に答える