簡體   English   中英

當在另一個文件中聲明struct時,如何使用struct作為函數的參數?

[英]How to use struct as argument of a function when the struct is declared in another file?

我正在編寫一個ac項目,並試圖將所有結構聲明保留在相關的.h文件中。 通過包含相關的標頭,這使我可以在任何.c文件中使用它們。 我還避免將我項目的頭文件包含在其他頭文件中。 我想這將使代碼更易於閱讀和維護。

我的問題是如何避免在使用該結構的頭文件中包含包含結構聲明的標頭。 有什么辦法嗎? (我沒有找到答案,對不起,如果重復)。 這是一個片段:

命令

#include "cmd.h"
#include "params.h"     //This allows usage of struct testPars

void move_parameters(struct testPars *testP) {
...
}

命令

#ifndef CMD_H
#define CMD_H
#include "params.h"     //I want to avoid this include in this file

void move_parameters(struct testPars *testP) ;
#endif

params.h

#ifndef PARAMS_H
#define PARAMS_H

struct testPars {
    char    name[16];
    double  value;
};
#endif

總的來說,這里關於正確的程序設計有很多困惑。

我正在嘗試將所有結構聲明保留在相關的.h文件中。 通過包含相關的標頭,這使我可以在任何.c文件中使用它們。

對於沒有私有封裝或結構簡單的快速而骯臟的編程,這是可接受的做法。

但是對於結構表示更復雜的ADT等的專業程序,您應僅在頭文件中保留前向聲明,並在相應的c文件中定義結構。 這導致私有封裝和模塊化,即良好的程序設計。 (搜索“不透明類型”或“不透明指針”的示例。此類前向聲明​​的正式術語是不完整類型 。)

您嘗試做的事情聽起來像上面的一樣,但完全倒退了:向調用者公開定義,但不要自己使用它。 顯然,您不能使用尚未包含並在程序中可見的結構,因為這沒有任何意義。

我還避免將我項目的頭文件包含在其他頭文件中。 我想這將使代碼更易於閱讀和維護。

這是一個壞主意。 您的每個頭文件都應被視為有關c文件做什么以及如何使用的公共文檔。 雖然c文件可以看作是私有數據,但其內容並不是調用者應該關注的任何內容。

該頭文件文檔的重要部分是列出該模塊具有的所有依賴關系,以便其他程序員可以快速瀏覽一下頭文件的頂部,並立即知道編譯該特定模塊所需的文件。

好的程序設計會爭取盡可能少的依賴關系:“松耦合”。 因此,所有#includes都被視為重要信息,應放在頭文件的頂部。 不應包含未使用的頭文件。

c文件除了其自己的頭文件外,不應包含任何包含。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM