【发布时间】:2018-10-20 15:05:49
【问题描述】:
我正在学习C,我真的不明白标题如何
文件有效,并确保我有两个问题。
1) 我们来看下面的程序:main.c:
#include <stdio.h>
#include <string.h>
#include "functions.h"
int main( void )
{
printf( "Num = %d\n", number );
printNumber();
return 0;
}
functions.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "functions.h"
void printNumber( void )
{
printf("Number = %d\n", number );
}
functions.h:
#ifndef FUNCTIONS
#define FUNCTIONS
int number;
extern void printNumber( void );
#endif // FUNCTIONS
程序在Header文件中的方式是没有extern关键字
参与,所以似乎有参考number 和程序
输出:
Num = 0
Number = 0
第一个问题是,number 是否被初始化(是数字全局
如果 number 仅存在于头文件中,则为变量或类似变量)
这是一个合法的代码/程序吗?
第二种情况,我们看一下main.c下面的代码:
#include <stdio.h>
#include <string.h>
#include "functions.h"
int main( void )
{
printf( "Num = %d\n", number );
printNumber();
return 0;
}
functions.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "functions.h"
void printNumber( void )
{
printf("Number = %d\n", number );
}
functions.h:
#ifndef FUNCTIONS
#define FUNCTIONS
extern int number;
extern void printNumber( void );
#endif // FUNCTIONS
这里程序将无法编译
`undefined reference to number`
这迫使我在main 中声明number:
#include <stdio.h>
#include <string.h>
#include "functions.h"
int number;
int main( void )
{
printf( "Num = %d\n", number );
printNumber();
return 0;
}
哪种方法是正确的,为什么?
最后一件事,为什么不完全适用
也到void printNumber( void )。我看到它正在使用
或不带 extern 关键字。
【问题讨论】:
-
在头文件中使用
int number;即可;这是您的目标文件中的所谓“暂定定义”,它将在链接时累积为单个定义。是的,number 被初始化为 0 作为任何全局变量。 -
@Ctx 以某种方式与您的评论相矛盾。
标签: c global-variables extern