回答
編譯器沒有找到printf
函數的聲明。這就是爲什麼它顯示編譯錯誤。
正確的聲明(ISO/IEC 9899:1999)printf
功能是:
int printf(const char * restrictformat, ...);
您可以調用前聲明函數像上面也可以包括header file
其中包含功能的聲明。 但是,只包含包含函數聲明的頭文件(#include <stdio.h>
代碼爲printf
)是最簡單和最安全的。
如果你想知道爲什麼你需要在調用函數前提供函數的聲明,你可以看看這個question。解釋如下 -
C編程語言的設計使得編譯器可以作爲單程編譯器來實現。在這樣的編譯器中,每個編譯階段只執行一次。在這樣的編譯器中,您無法將其引用到稍後在源文件中定義的實體。
此外,在C中,編譯器一次只解釋一個編譯單元(通常是.c文件和所有包含的.h文件)。所以你需要一個機制來引用另一個編譯單元中定義的函數。 C中的所有標識符在使用之前都需要聲明。這對功能和變量都是如此。對於函數,聲明需要在函數的第一次調用之前進行。完整聲明包括返回類型和參數的數量和類型。這也被稱爲函數原型。
您也可以在調用同一個編譯單元之前定義一個函數。或者你可以在調用它之前聲明它。包含包含函數聲明的頭文件是更好的主意(並非總是)。
並考慮購買新書。作者應該提到頭文件包含。
雅我1998年的書是 –
你可以查找函數的man-pages來找出哪個標準頭文件需要'#inc''來獲得一個函數的聲明。您也可以回到http://en.cppreference.com/w/c這樣的在線資源。 –
我不會說這本書已經過時了。書的作者只是假定每個人都知道庫頭,因此沒有明確提及(反覆冗餘)。 – kurakura88
你必須包含頭文件 「stdio.h中」
之初添加
#include<stdio.h>
.c文件。這是一個頭文件,包含在您編寫的每個c程序中。 stdio.h頭文件包含標準的輸入/輸出函數聲明(如printf和scanf)
- 1. Crystax wcsncasecmp並沒有在此範圍內
- 2. 載體,在此範圍內
- 3. glutBitmapString()在此範圍內
- 4. 「的memcpy」不在此範圍
- 5. 錯誤並不在此範圍內聲明
- 6. Arduino的MIDI控制器menuUsed並沒有在此範圍內
- 7. NOT1並沒有在此範圍
- 8. '_T'未在此範圍內聲明?
- 9. 函數「未在此範圍內聲明」
- 10. 'variantToString'未在此範圍內聲明
- 11. 'TRUE'未在此範圍內聲明C++
- 12. 'INPUT'未在此範圍內聲明
- 13. '__glibcxx_requires_valid_range'未在此範圍內聲明(xcode)
- 14. 'strcmp'未在此範圍內聲明
- 15. 變量未在此範圍內聲明?
- 16. 未在此範圍內聲明'sm'
- 17. ''未在此範圍內聲明
- 18. 未在此範圍內聲明
- 19. myClass未在此範圍內聲明
- 20. 'testArray未在此範圍內聲明'
- 21. 「GetGrade」在此範圍內未聲明
- 22. 'c'未在此範圍內聲明
- 23. 汽車在此範圍內未聲明
- 24. 「strcasecmp」在此範圍內未聲明
- 25. 在此範圍內沒有聲明
- 26. 在此範圍內未聲明OOP
- 27. OFHighScoreService未在此範圍內聲明
- 28. C++ _byteswap_ulong在此範圍內未聲明
- 29. g ++'nullptr'未在此範圍內聲明
- 30. 'MSHookIvar'未在此範圍內聲明
請把YK書扔掉..........它對任何程序員都沒有好處。 –