簡單c語言 - 簡單程式碼




為什麼#include<stdio.h>不需要使用printf()? (2)

printf()位於標準C庫中,鏈接器始終將標準庫鏈接到您的可執行文件,因此將找到任何標準函數,並且不會出現鏈接問題。

未能包含適當的頭導致使用非原型的函數可能導致問題,因為C編譯器假定沒有prototype的函數返回int並且接受可變數量的參數。 所以總是包括標題 - 這是你的安全圍欄。

會議記錄:

>type lookma.c
int main() {
  printf("%s", "no stdio.h");
}

>cl lookma.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

lookma.c
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:lookma.exe
lookma.obj

>lookma
no stdio.h

你最初標記過這個C ++,但它似乎是一個C程序。 如果範圍內沒有原型(例如由於省略#include <stdio.h>),C將自動為函數提供隱式聲明。 隱含聲明將是:

int printf();

這意味著printf是一個返回int的函數,可以接受任意數量的參數。 這個原型恰好適合您的通話。 你應該#include <stdio.h>

最後,我應該補充說,當前的C標準(ISO / IEC 9899:1999或通俗地說“C99”)不允許隱式聲明,並且該程序不符合。 刪除了隱式聲明。 我相信你的編譯器不支持C99。 C ++也需要正確的原型,不進行隱式聲明。







declaration