C中两个文件之间全局变量的使用

Use of global variables between two files in C

我需要使用首先在 .c 文件中声明的全局变量,然后在两个不同的 .c 文件中使用。问题,我在编译时收到错误消息。

这是声明,那里:

bool UP = false;

下面是我的使用方法:

extern bool UP;

我收到了这条错误信息。如果我将这些变量放在第二个文件中,它编译完美,但由于我需要在另一个文件中使用这些变量,所以我需要共享它。

gcc -c game.c -lGL -lGLU -lglut
gcc -o program main.o loadMap.o draw.o game.o object.o menu.o -lGL -lGLU -lglut
/usr/bin/ld: game.o: in function `game':
game.c:(.text+0x34): undefined reference to `Keyboard'
/usr/bin/ld: game.c:(.text+0x95): undefined reference to `UP'
collect2: error: ld returned 1 exit status
make: *** [makefile:10: program] Error 1

编辑:这里有更多源代码。 这是我声明变量的 .h 文件

#ifndef KEYBOARD_H_
#define KEYBOARD_H_

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


bool UP = false;
bool LEFT = false;
bool RIGHT = false;
bool DOWN = false;
bool UP_MENU = false;
bool DOWN_MENU = false;

void Keyboard(unsigned char key, int x, int y);

#endif

我想在这里使用它:

void game(int mX, int mY, Player p)
{
    drawMap(mX, mY);            //afficher la carte
    drawPlay(p); //Affiche le player
    
    
    glutKeyboardFunc(Keyboard);     //fonction de glut gérant le clavier
    
    if (LEFT == true)
    {
        
        moveLeft(p);        //va se déplacer vers la gauche si on appuie sur q
        LEFT = false;
        
    }
    if (RIGHT == true)
    {
        
        moveRight(p);       //va se déplacer vers la droite si on apppuie sur d
        RIGHT = false;
    }
    if (UP == true)
    {
        moveUp(p);
        UP = false;
    }
    
    if (DOWN == true)
    {
        
        moveDown(p);
        DOWN = false;
    }


    glutPostRedisplay();//upload la position du joueur
}

您需要将变量的定义放入.c 文件。

在keyboard.h中:

extern bool UP;

在keyboard.c中:

bool UP = false;

在其他c文件中包含keyboard.h以使用UP