私は C が初めてで、現在 C で Scheme インタープリターを実装しています。私は終わりに近づいていますが、まだ取り組むことができていない問題が私を悩ませています。
私は、プログラムが実行され、変更される間ずっと残る構造体への「globalEnvironment」ポインターが必要です(定数ではありません)。
/****************************************************************
Creates the List as a pointer to the conscell structure
*/
typedef struct conscell *List;
/****************************************************************
Creates a conscell structure, with a char pointer (symbol) and two pointers to
* conscells (first and rest)
*/
struct conscell {
char *symbol;
struct conscell *first;
struct conscell *rest;
};
List globalEnvironment;
/****************************************************************
Function: globalVariables()
--------------------
This function initializes the global variables
*/
void globalVariables() {
globalEnvironment = malloc(sizeof (struct conscell));
globalEnvironment->symbol = NULL;
globalEnvironment->first = NULL;
globalEnvironment->rest = NULL;
}
ご覧のとおり、"List" はコンセル構造へのポインターです。だから私が望むのは、globalEnvironment リストがグローバルであることだけです。
問題は、そこで malloc を実行できないことです。次のことを試してみると:
List globalEnvironment = malloc(sizeof (struct conscell));
「List globalEnvironment;」の代わりに 「初期化要素は定数ではありません」というエラーが発生します
この状況に対処するために、プログラムの開始時に実行され、globalEnvironment を初期化し、メモリを割り当てる新しい関数「globalVariables」を作成しました。ただし、期待どおりに機能していません。簡単にするためにここに書いていない他の関数のセグメンテーション違反エラーが発生し続けています。
Cの構造体へのポインタ(定数ではない)を宣言する別のより簡単な方法はありますか?
誰かが助けてくれることを願っています、ありがとう