2013-03-31 58 views
1

我遇到問題,我需要將一個文件中的變量從另一個文件移到另一個文件,我需要包含一個庫。問題是當我包含庫時,編譯器會給出一個錯誤,說明這些變量是未定義的。 外部文件:編譯器在包含其他庫後不接受extern變量

#include <stdio.h> 
#include "PHY.h" 

void InterruptHandler(); 

extern int flag; 
extern long toSend; 
extern int recieved; 
void InterruptHandler() 
{ 
    //here i use the flag 
} 

主:

#include <stdio.h> 
#include "PHY.h" 
void main() 
{ 
    int flag;  // DETERMINATES CLOCK STATUS 
    int recieved; 
    long toSend; // THE DATA WE WANT TO SEND (for instance 0x12345678) 
    toSend = 0x12345678; // EXAMPLE 
    // .... here the code continues.. 
} 

在先進的感謝。

+0

你是否在某處包含外部文件? –

+0

您是否嘗試過將變量設置爲全局變量(將它們移到'main'之外)? – szx

回答

0

你不能讓局部變量的函數(例如,在main()flag)外的函數的任何地方直接可見的,更不用說通過extern達到這些目標。

您需要將這些局部變量移動到main()之外,使其成爲正常的全局變量。他們將在您的「外部」文件中通過extern到達。此外,由於代碼表明您正在處理中斷,因此請編制ISR volatile中訪問的全局變量。如果你不這樣做,他們的變化可能在ISR或其外部是不可見的。

+0

非常感謝你!它幫助! – antonpuz

+0

更糟糕的是,'volatile'並不能保證可以幫助你處理信號。標準保證的唯一類型是從C99開始的'sig_atomic_t'。通過新的C11標準,您還可以使用具有「lockfree」屬性的原子類型。 –

+0

@JensGustedt我知道。讓我們一步一步來做。 –