【C言語】複数ファイルにおける構造体の定義と宣言

1527 ワード

1.構造体は.c  .hファイルに複数回宣言し、複数回定義できない
2.ヘッダファイルで変数定義を行わないでください.a.hにはmainとして変数strが定義.cとfunc.cファイルにはa.hが含まれており、プリプロセッサはmainに相当するa.hを2つのソースファイルの先頭にそれぞれ添付する.cとfunc.cではstrグローバル変数を繰り返し定義した.コンパイルは大丈夫です.コンパイルが終わってlinkを開始すると、linkerはmainを発見します.OBjとfunc.objにはstr記号があり、Cネーミングと競合する場合と同じエラーが表示されます.
2.例えば:typedefは構造タグstrを宣言した後、strで構造変数を宣言すると、階層がはっきりする
プログラム:
main.c:
/*   */

#include 
#include "a.h"
//#include "func.c"  //        error LNK1169: one or more multiply defined symbols found

//cps student;  // .c         

int main()
{
    printf("Hello!
"); input(); pw(student.name); printf(" age:%d
score:%0.1lf

", student.age, student.score); return 0; } func.c: /* */ #include "a.h" //#include // , //cps student;// .c void input() { printf("age:"); scanf("%d", &student.age); printf("
name:"); scanf(" %c", &student.name); printf("
score:"); scanf("%lf", &student.score); } int pw(char c) { return printf("
%c :
", c); } a.h: /* */ #ifndef A_H_INCLUDED #define A_H_INCLUDED typedef struct { int age; char name; double score; } cps; // // .c cps student;// .h student .c , , void input(); // int pw(char c); // #endif