根據我正在閱讀的一本書,
當您撰寫自己的頭檔案時,請使用前處理器指令的第二種形式,即帶有引號的那種。使用引號時,C 首先搜索存盤程式的磁盤目錄,然后搜索內置的#include 目錄。
程式TestingGrounds.c
#include <stdio.h>
#include "TestingExtensions.h"
main()
{
printf("%d", NUM);
}
頭檔案TestExtensions.c
#define NUM 21
這兩個檔案的目錄都是MyFirstC。
我得到的錯誤是致命錯誤: TestingExtensions.h: No such file or directory。
如果我使用#include "TestingExtensions.c ",它作業得很好。
我試圖模仿這個示例代碼:
// Example program #1 from Chapter 7 of Absolute Beginner's Guide to
// C, 3rd Edition
// File Chapter7ex1.c
/* This is a sample program that lists three kids and their school
supply needs, as well as cost to buy the supplies */
#include <stdio.h>
#include <string.h>
#include "Chapter7ex1.h"
main()
{
int age;
char childname[14] = "Thomas";
printf("\n%s have %d kids.\n", FAMILY, KIDS);
age = 11;
printf("The oldest, %s, is %d.\n", childname, age);
strcpy(childname, "Christopher");
age = 6;
printf("The middle boy, %s, is %d.\n", childname, age);
age = 3;
strcpy(childname, "Benjamin");
printf("The youngest, %s, is %d.\n", childname, age);
return 0;
}
In this example, for a file named Chapter7ex1.c, #include "Chapter7ex1.h" is used. I'm not sure what I'm missing.
uj5u.com熱心網友回復:
在源代碼中插入指令#include "TestingExtensions.h"不會告訴編譯器讀取檔案TestingExtensions.c并將其視為標頭。指令中使用的檔案名#include必須與檔案系統中的檔案名相同。1
當您想與其他源檔案共享源檔案中的某些內容時,一般做法是:
在名為 的源檔案
SomeFileName.c中,您定義源檔案提供給程式的所有函式和物件。值得注意的是,您使用函式體(實作該函式的源代碼)撰寫函式,并使用諸如. 2int MyVariable = 3;在名為 的頭檔案
SomeFileName.h中,您宣告要讓程式的其他部分知道的函式和物件的識別符號。值得注意的是,您在沒有函式體的情況下宣告函式,如 中,其中沒有函式代碼,并且您宣告變數而不給它們初始值并且經常使用,如在中。int MyFunction(int MyParameter);{ … }externextern MyVariable;如果您在頭檔案中宣告的函式和變數需要特殊型別,例如自定義結構,您可以在頭檔案中包含這些型別的定義。
從您的評論中,您似乎有一個名為的檔案TestingExtensions.c,您正試圖將其包含為TestingExtensions.h. 您需要創建一個新檔案。復制TestingExtensions.c并TestingExtension.h編輯它以進行以下更改:
- 洗掉您不想與程式的其余部分共享的所有內容。例如,如果檔案包含函式
foo和bar,并且您只想共享foo,則洗掉定義 的代碼bar。 - 將所有函式體(中的代碼
{ … })替換為;, 以將函式定義更改為僅宣告。 - 將變數的所有定義更改為宣告。通常,您希望避免使用外部變數,尤其是在源檔案之間共享的外部變數。但是,如果您這樣做,請將它們更改為宣告,方法是洗掉任何初始化程式并在它們前面加上
extern.
腳注
1 AC 實作可以將標頭名稱從#include指令轉換為檔案系統中的不同名稱。然而,這是一個允許 C 語言在使用檔案系統的計算機中實作的功能,這些檔案系統處理名稱的方式與它們在 C 源代碼中的顯示方式不同,例如對長度或字符大小寫有限制。在現代 C 實作中,#include指令中的名稱幾乎總是與檔案系統中的名稱相同,可能有一些例外,例如用于分隔路徑中檔案夾的字符。
2由于 C 語言發展的歷史,哪些宣告定義了物件,哪些僅僅是描述識別符號但不定義物件的宣告是復雜的。可以肯定的是,提供與 一樣的初始值的宣告= 3定義了一個物件。使用extern但不提供初始值的宣告不定義物件。其他一些形式可能取決于背景關系。
uj5u.com熱心網友回復:
檢查您的頭檔案是否被TestingExtensions.h準確呼叫,包括大小寫。您需要添加一個.h. 擴展至TestingExtensions
uj5u.com熱心網友回復:
我建議在您知道它所在的目錄中仔細檢查 .h 檔案的拼寫和大小寫。這可能是兩者之間的細微差別導致編譯器無法看到它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/442976.html
標籤:c
上一篇:如何獲取字串陣列的長度
