我写了 一个头文件canshu.h
#ifdef _CANSHU_H
#define _CANSHU_H
int i;
#endif
引用它
#include<stdio.h>
#include"canshu.h"
void mian()
{
i=1;
printf("%d",i);
}
可是运行的时候却说'i'undeclared identifie
不知道哪里错了r
æ©å±å为.hçæ件ï¼å¨Cè¯è¨ä¸è¢«ç§°ä¸ºheader file, ä¹å°±æ¯å¤´æ件ã
头æ件çæ°æ®æ ¼å¼å°±æ¯æ®éçææ¬æ件ï¼å¯ä»¥éè¿æ°å»ºææ¬æ件(txt)ï¼åææ©å±åæ¹ä¸º.hçæ¹å¼å建ï¼å¨æ¤ä¸èµè¿°ã
ä¸ã头æ件å å®¹æ ¼å¼ã
头æ件å 容并没æåºå®çæ ¼å¼è¦æ±ï¼ä¸è¿ä¸è¬ä¸ºé²æ¢åµå¥å¼ç¨ç»ç¼è¯å¨å¸¦æ¥æ»éæè æ²¡å¿ è¦çå¼éï¼ä¸è¬çº¦å®æ´ä¸ªå¤´æ件ä¸ææå 容å¨ä¸ä¸ªæ¡ä»¶ç¼è¯ä¸ï¼å³å¦ä¸æ ¼å¼ï¼
#ifndef å®å
#define å®å
//头æ件主ä½
#endif
è¿æ ·å¯ä»¥ä¿è¯ä¸ä¸ªå¤´æ件å¨ä¸ä¸ªæºæ件ä¸æå¤åªè¢«å¼ç¨ä¸æ¬¡ã为é¿å å®åéå¤ï¼å®åä¸è¬ç±å¤´æ件å转æ¢èæ¥ï¼å¦æ头æ件åæ¯xxx.hï¼é£ä¹å®åä¸è¬å®ä¹ä¸ºï¼
_XXX_H_
å³åååå ä¸ä¸ªä¸å线ï¼åæ¶æ件åä¸é¤æ°åãåæ¯ãä¸å线以å¤çå符å转æ¢ä¸ºä¸å线(_)ã
头æ件主ä½ä¸å 容åæ ·æ²¡æå强å¶çº¦å®ï¼å¯ä»¥åºç°å¨æºæ件(.c)ä¸çä»»ä½ä»£ç åå¯ä»¥æ¾å¨å¤´æ件ä¸ãä¸è¿ä¸è¬æ åµä¸å¯ä»¥å æ¬ä»¥ä¸å ç§å 容ï¼
1 å¼ç¨å ¶å®å¤´æ件ï¼æ ¼å¼ä¸º
#include <xxx.h>
æ
#include "xxx.h"
äºè åºå«å¨ä»ç»å¤´æ件å¼ç¨æ¶å详ç»ä»ç»ã
2 å®ä¹ç§æç±»åãæ¯å¦
typedef unsigned long U32; //为äºç®åèç»æ 符å·32ä½æ´åå®ä¹ä¸ä¸ªæ°çåå
struct xxx {};
ä¹å¯ä»¥æ¯enum, unionçå¤æç±»åã
3 å®å®ä¹ãæ¯å¦
#define MAX(a,b) (a>b?a:b)
4 å½æ°å£°æãæ¯å¦
void test_function(void);
5 å ¨å±åé声æãæ¯å¦
extern int global_var;
6 å¦ææä¸ä¸ªéæå ¨å±åééè¦å¨ä¸åæºæ件ä¸ä½¿ç¨ï¼ä½åæ件ä¹é´äºä¸ç¸å ³ãé£ä¹å¯ä»¥æ¾å¨å¤´æ件ä¸ãå¦ï¼
static int gs_var = 3;
7 对äºæ¯æC99è§èçCç¼è¯å¨ï¼è¿å¯ä»¥æå èå½æ°å®ä¹å¨å¤´æ件ä¸ãæ¯å¦
static inline int get_min(int a, int b)以ä¸æ¯å¸¸è§ç头æ件ä¸çå ç´ ãä½å®é ä¸å¤´æ件ä¸ä¹å¯ä»¥æ¾å ¨å±åéçå®ä¹ï¼å ¨å±å½æ°çå®ç°çãä½æ¯å¤´æ件ä¸ä¸æ¦å®ä¹äºè¿æ ·çå ç´ ï¼è¿ä¸ªå¤´æ件å¨ä¸ä¸ªå·¥ç¨ä¸åªè½è¢«ä¸ä¸ªæ件å¼ç¨ï¼å¦åç¼è¯å¨ä¼æ¥éå¤å®ä¹çé误ã
æ¯å¦å¦ææä¸ä¸ªè§æ¨¡å¾å¤§ç常éæ°ç»ï¼æ¯å¦ä¸å¯å¾ççäºè¿å¶å¼ï¼å¦ææå®å®ä¹å¨æºæ件ä¸ï¼å°±ä¼æ¾å¾å¾åä½ï¼å 为并ä¸ä¼ç»å¸¸ä¿®æ¹ã è¿æ¶å¯ä»¥å®ä¹å¨å¤´æ件ä¸ï¼åªå¨ä¸ä¸ªæºæ件ä¸å¼ç¨ï¼å½æå¤å¹ å¾çéè¦éæ¶æ´æ¢æ¶ï¼ä¹å¯ä»¥éè¿ç®åçå¨æºæ件ä¸ä¿®æ¹å¼ç¨ç头æ件åè¾¾å°ä¿®æ¹çç®çã
äºã头æ件çå¼ç¨ã
头æ件å¼ç¨çæ¹æ³å
¶å®ä¹åå·²ç»å¤§è´è¯´è¿äºï¼å¨æºæ件ä¸å¼ç¨å¤´æ件åå¨å¤´æ件ä¸å¼ç¨çæ ¼å¼æ¯ä¸æ ·çï¼
#include<xxx.h>æè
#include "xxx.h"
xxx为头æ件åã
ç¨<>å""æ¯æä¸å®çåºå«çãå¨ç¼è¯å¨æ¥æ¾å¤´æ件çæ¶åï¼ä¼å¨ä¸¤ä¸ªåºååå«æ¥æ¾ã
ä¸ä¸ªæ¯ç³»ç»å¤´æ件åºåï¼å³ç±»ä¼¼äºstdio.hä¸ç±»çCåºå½æ°å¤´æ件åºã
å¦ä¸ä¸ªæ¯èªå®ä¹å¤´æ件åºï¼æ¯å¦å½åç®å½ï¼ä»¥åå ¶å®èªå®ä¹çç®å½ã
ç¨<>æ¶ï¼ç¼è¯å¨ä¼å å¨ç³»ç»åºåæ¥æ¾ï¼ç¶ååæ¥æ¾èªå®ä¹åºåãèç¨""æ¶åç¸åã
ç±äºä¸è¬å¹¶ä¸æ¨èèªå®ä¹å¤´æ件åä¸ç³»ç»å¤´æ件åç¸å(容æå¼èµ·æ§ä¹å¹¶é¾ä»¥ç»´æ¤)ï¼æ以å å顺åºå¹¶ä¸æ¯å¤ªéè¦ï¼å°¤å ¶å¨ç¡¬ä»¶é度è¶æ¥è¶å¿«çä»å¤©ï¼ä½¿ç¨åªç§ç¬¦å·å¼ç¨å¤´æ件已ç»å·®å«å¾å°äºã
你在说什么啊,我不明白你的意思
追答#ifdef _CANSHU_H
#define _CANSHU_H
上面的意思就是”如果定义就定义“,逻辑错误
#ifndef _CANSHU_H
#define _CANSHU_H
如果未定义就定义一个,这样逻辑才对