2019-08-16 23:19发布
heiheihaha 发表于 2017-7-11 14:31 我前面加了static 编译是没问题了,但是我一直不明白#ifndef __LCD_H#define __LCD_H 这个不就是防止重 ...
Owen 发表于 2017-7-10 11:48 是不是没有用#ifndef 然后lcd.h被好几个文件包含了
heiheihaha 发表于 2017-7-10 14:03 #ifndef 用在哪里
最多设置5个标签!
尽量不要在头文件定义变量。
一般的头文件里用的#ifndef, #define, #endif这几个预编译指令,解决的是一个.c或.cpp文件编译时的重复包含问题,否则会出现类型重复定义问题:"error C2011: 'xxx' : 'class' type redefinition"
而如果在头文件中定义了默认命名空间的变量,那么如果工程中有多个.c或.cpp文件包含了该头文件,在这几个源文件编译后的目标文件.obj中均包含有该变量,于是在链接时会再报一个变量重复定义的错误
你用static修饰之后可以使当前文件的数组变量对其他文件不可见。也就是说,你现在程序里依然存在好几份你定义的数组变量,只不过“骗过”编译器不报错了,但是会占很多存储空间
这是main函数
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
这是lcd.c函数
#include "lcd.h"
#include "stdlib.h"
//#include "font.h"
//#include "usart.h"
#include "delay.h"
#ifndef 用在哪里
[mw_shl_code=applescript,true]#ifndef _TEST_H_
#define _TEST_H_
#include "stm32f2xx.h"
#define int testarray[10];
void test_gpio_Init();
#endif[/mw_shl_code]
类似这样,你去百度一下#ifndef,解释的比较清楚
一周热门 更多>