main.c中有如下定义:
#include <stdio.h>
#include "test.h"
typedef struct {
int valA;
int valB;
}data_t;
typedef enum{
__FETCH__ = 1,
__PROCESS__,
}state_e;
static void printmain(int val)
{
data_t data;
data.valA = val;
data.valB = val++;
printf("%x\n",__FETCH__);
}
int main(void)
{
printmain(2);
output(1);
return 0;
}
test.c文件中:
#include <stdio.h>
#include "test.h"
#define TEST_A = 91
int test_B = 55;
typedef struct{
int valA;
int valB;
}data_t;
typedef enum{
__FETCH__ = 11,
__PROCESS__,
}state_e;
static void printtest(int val)
{
data_t data,
data.valA = val;
data.valB = val--;
printf("%x\n",__FETCH__);
}
void output(int val)
{
printtest(val);
}
输出结果为:main.c中printmain打印1
,test.c中output打印b
。
由于类型定义以及宏在编译后不生成符号表,所以在main.c文件中有重复定义也不会引起冲突;
而变量和函数会生成符号表,在链接时会引发冲突;
如果类型的定义放在test.h头文件中,则会引发重定义错误;