[英]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
。 如果全局变量是非const
或volatile
则将是相同的。
// 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.