將大文件拆分為 C/C++、Java 和 Python 中的單獨模塊

| | | | | | | | | | |

這種方法注定要失敗,通常需要從頭重寫。

所以,為了解決這種情況,我們可以嘗試將問題分成幾個子問題,然後嘗試通過一。

這不僅讓我們的任務更輕鬆,還可以讓我們從高處實現

// 插入一個完整的鍊錶


#include <標準輸入輸出.h >
#include
標準庫.h >


// ------------ -------------- ------
// 公告 - 開始:
// ------ --------------------------


結構 節點;

struct Node * create_node ( int data);

void b_insert ( struct Node ** head, int data);

void n_insert ( struct Node ** head, int data, int pos);

void e_insert ( struct Node ** head, int data);

void display ( struct Node * temp);


// ------------ -------------- ------
// 公告 - END:
// ------ --------------------------


int main ()

{

結構 Node * head = NULL;


int ch, data, pos;


printf ( "鍊錶:" );

while (1) {

printf ( "1.Insert at beginning" );

printf ( "2.Insert在第 N 個位置" );

printf ( "3.Insert結束時" );

printf ( "4.Display " );

printf ( "0.Exit " );

printf ( "輸入你的選擇:" );

scanf ( "%d" , & ch);


switch (ch) {

case 1:

printf ( "輸入數據:" );

scanf ( "%d" , & amp; data);

b_insert(&head,data);

break ;


case 2:

printf ( "輸入數據:" );

scanf ( "%d" , & amp; data);


printf ( "輸入位置:" );

scanf ( "%d" , & pos);

n_insert(&head,data,pos);

break ;


case 3:

printf ( "輸入數據:" );

scanf ( "%d" , & amp; data);

e_insert(&head,data);

break ;


case 4:

顯示(頭部);

break ;


case 0:

<代碼類="未定義空格"> return 0;


默認 :

printf ( "錯誤選擇" );

}

}

}


// ---------------- ---------- ------
// 定義 - START:
// ---- ----------------


struct Node {

int <代碼類="plain">數據;

struct Node * next;

};


struct Node * create_node ( int data)

{

struct Node * temp

= ( struct Node *)

malloc ( sizeof ( struct 節點));

temp- >數據=數據;

temp- >下一個 = 空;


return temp;

}


void b_insert ( struct Node ** head, int data)

{

struct Node * new_node = create_node (data);


new_node->下一個 = * 頭;

* head = new_node;

}


void n_insert ( struct Node ** head, int data, int pos)

{

if (* head == NULL) {

b_insert (head, data);

return ;

}


struct 節點 * new_node = create_node (data);


struct Node * temp = * head;


for ( int i = 0; i "pos - 2; ++ i)

temp =溫度->下一個;


new_node->下一個=溫度->下一個;

temp- >下一個 = 新節點;

}


void e_insert ( struct Node ** head, int data)

{

if (* head == NULL) {

b_insert (head, data);

return ;

}


struct Node * temp = * head;


while (temp- > next!= NULL)

temp = temp- >下一個;


struct Node * new_node = create_node (data);

temp- >下一個 = 新節點;

}


void display ( struct Node * temp)

{

printf ( "元素是:" );

while (temp! = NULL) {

printf ( "%d" , temp-> 數據);

temp = temp- >下一個;

}

printf ( " " );

}


// ------ --------------------------
// 定義 - END
// --------- -----------

編譯代碼:我們可以編譯上面的程序:

 gcc linkedlist.c -o linkedlist 

而且成功了!

上面代碼的主要問題:
我們已經看到了程序的主要問題,單獨或分組處理代碼都不是那麼容易。

如果有人想使用上述代碼程序,然後人們面臨的許多問題中的一些:

  1. 必須通過完整的源文件。 改進或改進某些功能。
  2. 不能輕易重用程序作為其他項目的基礎。
  3. 代碼很雜亂,一點吸引力都沒有,導致代碼瀏覽起來非常困難。

在團體項目或大型項目的情況下,上述方法保證會增加總體成本、能源和故障率。

正確的做法:

我們看到這些行在每個以“#include”開頭的C / C++程序中開始。
這意味著包括在“庫”頭文件 (.h 文件) 中聲明並可能在 library.c / cpp 文件中定義的所有函數。

這些行是在編譯時進行預處理的。

我們可以手動嘗試創建這樣的庫以用於我們自己的目的。

需要記住的重要事項:

  1. “.h”文件只包含原型聲明(如函數、結構)和全局變量。
  2. “.c / .cpp”文件包含實際實現(頭文件中的聲明定義)
  3. 編譯所有源文件時,請確保同一函數的多個定義,同一個項目不存在變量等。 (非常重要)
  4. 使用靜態函數, 將自己限制在聲明它們的文件中。
  5. 使用 extern 關鍵字來使用外部文件引用的變量。
  6. 使用 C++ 時,請注意命名空間,始終使用 namespace_name:: function (), 以避免衝突。

通過將程序拆分為更小的代碼:
通過查看上面的程序,我們可以看到如何將這個大程序拆分為合適的小部分,並然後很容易處理。

上面的程序基本上有兩個主要功能:
1)在節點中創建、插入和保存數據。
2)顯示節點


這樣我可以相應地拆分程序,以便:
1) 主文件是 >程序驅動程序,來自插入模塊的 Nice Wrapper 以及我們使用其他文件的地方。
2) 粘貼 - >真正的實現就在這裡。

結合上面提到的要點,程序分為:

linkedlist.c - >包含驅動程序
insert.c - >包含插入代碼

linkedlist.h - >包含必要的節點聲明
insert.h - >包含必要的節點插入聲明

在我們開始的每個頭文件中:

 #ifndef FILENAME_H #define FILENAME_H 聲明 ... #endif 

我們在#ifndef、#define 和#endif、 之間寫聲明的原因是為了防止在調用同一個頭文件時,多次聲明數據類型、變量等標識符在屬於同一項目的新文件中。

對於此示例程序:

insert.h - >包含插入節點的聲明以及節點本身的聲明。

非常重要的是要記住編譯器可以在頭文件中看到聲明,但是如果您嘗試編寫 在其他地方包含 聲明,這將導致錯誤,因為編譯器會在繼續執行鏈接步驟之前單獨編譯每個 .c 文件。 ,

connectedlist.h - >包含 Node 及其 Display 聲明的幫助文件,使用它們的文件必須包含這些聲明。


insert.c - >通過 #include "connectedlist.h" 包含一個 Node 聲明, 包含聲明以及在 insert.h 中聲明的所有其他方法定義。

connectedlist.c - >簡單包裝器,包含一個無限循環提示用戶在所需位置插入整數數據,還包含一個顯示列表的方法。

最後要記住的是,沒有意義相互包含文件可能會導致多次覆蓋並導致錯誤。

考慮到以上情況,你應該仔細劃分成合適的例程。

linkedlist.h


// connectedlist.h


# ifndef LINKED_LIST_H
#define LINKED_LIST_H


struct Node {

int 數據;

struct Node * next;

};


void display ( 結構 節點 * temp);


#endif

insert.h


// insert.h


# ifndef INSERT_H
#define INSERT_H


struct Node;

struct Node * create_node ( int data);

void b_insert ( struct Node ** head, int data);

void n_insert ( struct Node ** head, int data, int pos);

void e_insert ( struct Node ** head, int data);


#endif

insert.c


// insert.c


#include "linkedlist.h"
// & quot; "因此預處理器將
// 查找到當前目錄並
// 稍後查找標準庫文件。


#include <標準庫.h >


struct Node * create_node ( int data)

{

struct Node * temp = ( struct 節點 *) malloc ( sizeof ( struct Node));

temp- >數據=數據;

temp- >下一個 = 空;


return temp;

}


void b_insert ( struct Node ** head, int data)

{

struct Node * new_node = create_node (data);


new_node->下一個 = * 頭;

* head = new_node;

}


void n_insert ( struct Node ** head, int data, int pos)

{

if (* head == NULL) {

b_insert (head, data);

return ;

}


struct 節點 * new_node = create_node (data);


struct Node * temp = * head;


for ( int i = 0; i "pos - 2; ++ i)

temp =溫度->下一個;


new_node->下一個=溫度->下一個;

temp- >下一個 = 新節點;

<

將大文件拆分為 C/C++、Java 和 Python 中的單獨模塊 _files: Questions

將大文件拆分為 C/C++、Java 和 Python 中的單獨模塊 cos: Questions

Shop

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Best laptop for Zoom

$499

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method