繁体   English   中英

其他C文件中的声明和定义之间的分隔

[英]Division between declaration and definition in other C files

我想知道如何在声明和定义之间进行区分。 我读到的与该主题问题相关的资料很少,但目前只能通过基本功能来完成。 问题是当我尝试在头文件中声明常量全局变量时,我想在函数中使用此常量,该函数在同一位置有声明,但在其他文件中有定义。 我有2个扩展名为.c的文件,一个扩展名为.h的文件。

文件main_lib.h包含:

#ifndef _MAIN_LIB_H_
#define _MAIN_LIB_H_
const int N_POINTS=10;

struct Point{
    int x;
    int y;
};
void fill_random(struct Point points[], int n);
void closest(struct Point points[], int n, struct Point* p);

#endif /* _MAIN_LIB_H_ */

文件main_lib.c包含:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include "main_lib.h"

    void fill_random(struct Point points[], int n){
...
    }
    void closest(struct Point points[], int n, struct Point* p){
...
    }

最后一个名为main.c的文件包括:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "main_lib.h"

int main()
{
    srand(time(0));
    struct Point random_points[N_POINTS];

    struct Point *p;
    p=&random_points[0];

    fill_random(p,N_POINTS);
    closest(p,N_POINTS,p);

    return 0;
}

问题是如何更正此代码以在没有错误状态的情况下运行它。 非常感谢您的帮助。

问题是当我尝试在头文件中声明常量全局变量时...

如何更正此代码以在没有错误状态的情况下运行它?

而是在main_lib.h @Scheff中 声明 extern 如果全局变量是非constvolatile则将是相同的。

// const int N_POINTS=10;
extern const int N_POINTS;

仅在main_lib.c中定义一次

// add
const int N_POINTS=10;

我经常使用的方法是:

// lib.h
#ifndef EXTERN
#define EXTERN extern
#endif
EXTERN int myInt;

// lib.c
#include "lib.h"

// main.c
#define EXTERN
#include "lib.h"

myInt现在将其中所有的模块被称为lib.h被包括在内,但只会在声明一次main.c 当您有很多包含项时很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM