1. 变量的定义和声明
C语言定义和声明分为变量的定义和声明和函数的定义和声明。由于,函数是具有全局外部特性,并且函数的定义和声明区别是很明显的。其声明需要返回值类型,函数名和参数列表。而函数的定义需要函数体。所以,很容易区别函数的声明和定义。对于变量的声明和定义,就不是那么明显。通常变量定义和声明的区别是有没有为变量分配内存。如果为变量分配内存就是定义,否则就是声明。变量声明可以出现多次,但定义只能出现一次。
2. 强符号和弱符号
强符号:函数和初始化的全局变量称为强符号。
弱符号: 未初始化的全局变量称为弱符号。
在程序中,强符号只能出现1次,弱符号会出现多次。如果存在一个强符号和多个弱符号,gcc会选择强符号。如果存在多个弱符号,会选择其中一个弱符号作为定义,并分配内存。
3. 实例
实例1:多个强符号
三个文件test11.h, test11.c和test22.c,具体如下:
test11.h:
#ifndef _TEST1_H
#define _TEST1_H
#include <stdio.h>
int i=1; //此处i是定义,是强符号
void printmsg();
#endif
test11.c
#include "test11.h"
void printmsg(){
printf("i=%d\n",i);
}
test22.c