2015-09-09 55 views
2

我正在研究C編程語言,並開始瞭解頭文件。函數聲明文件中需要C頭指令?

我在我的程序中使用三個不同的文件。一個頭文件和兩個源文件:

encrypt.h

void encrypt(char *message); 

encrypt.c

#include "encrypt.h" 

void encrypt(char *message) 
{  
    while(*message) 
    { 
     *message = *message^31; 
     message++; 
    } 
} 

的main.c

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

int main() 
{ 
    char myMessage[] = "Hello"; 

    printf("Regular message: %s\n", myMessage); 
    encrypt(myMessage); 
    printf("Encrypted message: %s\n", myMessage);   

    return 0; 
} 

在encrypt.c文件的第一行是#include語句:

#include "encrypt.h" 

我的問題是,爲什麼是這個文件裏面需要此行。我正在閱讀#include指令如何具有複製/粘貼功能,並且在main.c文件中我可以看到這種方法如何支持加密函數的前向聲明;然而,在encrypt.c文件中,似乎該函數的前向聲明不是必需的,並且想知道在這種情況下使用include指令的目的是什麼?

如果此問題已被問及其他地方,並將根據需要標記爲重複,我表示歉意。謝謝你的澄清。

+0

你對「函數聲明文件」有什麼意思? – Olaf

+0

我不確定我是否正確使用該術語。我指的是「encrypt.c」作爲函數聲明文件。 –

+0

我同意,這是有點不清楚,我繼續並刪除使用「函數聲明文件」。 –

回答

3

在您的特定情況下,必要encrypt.c包括encrypt.h,但它是常規的它這樣做。

頭文件的正常用途是爲可以在多個源文件之間共享的聲明提供一個公共位置。這樣可以避免程序不同部分的聲明不一致,並且需要進行更改時,可能會減少需要更新的文件數量。

encrypt.c並不需要包括encrypt.h因爲後者只包含的功能encrypt()的聲明,並encrypt.c已經有一個在該函數的定義的形式。它仍然有用,因爲它允許編譯器驗證encrypt.h中的聲明是否與encrypt.c中的定義一致。

如果encrypt.c定義更多的功能,和encrypt.h提供聲明爲所有這些,那麼它也可以在encrypt.c有助於確保所有函數的聲明在其中是可見的所有功能在其中,因此克服的相對順序上有任何依賴性實際的定義。

0

旁註:

的時刻,你添加一個新的源文件fancy_encrypt.c它調用encrypt()功能你必須有一個encrypt.h文件編譯後衛

#ifndef ENCRYPT_H 
#define ENCRYPT.H 

void encrypt(char * message); 

#endif 

否則,你會得到一個由於encrypt()的多重聲明導致的編譯器錯誤。