web-dev-qa-db-ja.com

ヘッダーファイルで構造体を宣言します

ソースファイルで使用できるように、ヘッダーファイルで構造を宣言したいと思います。私は何が間違っているのですか?どの関数からでも構造体にアクセスできるようにしたい。

info.h

#ifndef INFO_H
#define INFO_H

typedef struct info
{
   int mem_size;
   int start_loc;
   int used_space;
   int free_space;
} INFO;
#endif

test.c

#include <stdio.h>
#include <stdlib.h>
#include <info.h>

#define F_first 1
#define F_last 2
#define F_data_int 3
#define F_data_char 4
#define F_data_float 5
#define F_print 6

void * f(int code);

int main() {

INFO in;
in.mem_size = 8;
f(F_last, 0,0);
return(0);
}

void * f(int code) {
printf("%d", in.mem_size);
}
8
Nelson.b.austin

交換:

#include <info.h>

と、

#include "info.h"

<>コンパイラは、事前に指定されたヘッダーフォルダ内のヘッダーファイルのみを検索します。これは、標準ライブラリのヘッダーファイルに使用されます。
""コンパイラは、最初に.cファイルが置かれているローカルディレクトリのヘッダーファイルを検索します。これは、ユーザー定義のヘッダーファイルに使用されます。

8
Alok Save

はい...カスタムベースのヘッダーには、#include "info.h"ではなく#include <info.h">を使用する必要があります。通常、これらは、Unix/Linuxプラットフォームの/usr/includeディレクトリに通常配置されているシステムブランチの一部ではありません。

1
Rico