簡體   English   中英

C在函數定義中使用前向聲明

[英]C using a forward declaration within a function definition

我正在開發一個項目,我不得不使用一些以前編寫的代碼,它使用許多頭文件來調用其他頭文件。 我試圖保持我的應用程序分離,但我仍然需要使用前面代碼中定義的許多類型和函數。

在引用其他頭文件中聲明的數據類型時,我在自己的頭文件中添加了前向聲明。 我現在的問題是,我正在嘗試從源文件中的函數定義中引用聯合類型,我不太清楚如何做到這一點。

舊頭文件:

/* filename: include.h */

typedef union SOME_UNION_TYPE
{
  int a;
  .
  .
}SOME_UNION_TYPE;


我的源文件:

/* filename: file.c */

void func()
{
  SOME_UNION_TYPE A;
  .
  .
  return;
}


我知道在我的源代碼中包含“include.h”會更容易,但我盡量避免使用它。 到目前為止,我的嘗試一直是在我的頭文件中聲明union,希望將typedef名稱暴露給編譯器。

我的頭文件:

/* filename: file.h */

union SOME_UNION_TYPE;


但是,當我編譯時,我收到一個錯誤,抱怨func()中A的未知大小。

在此先感謝您的幫助。

#include指令不是要避免的。 如果您擔心其他人的代碼會污染您的代碼,您可以制作一個包含所需標題的標題,並直接包含該標題。

復制代碼很糟糕。

如果您需要創建該類型的實際實例,則需要完整的聲明,而不僅僅是名稱。

在這種情況下,正確的做法是咬住子彈並包含定義類型的頭文件。

其他代碼可能包含一堆其他標題,因為它需要它們! 你應該只包括另一個標題,否則你復制的代碼是壞的。

暫無
暫無

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

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