猿问

为什么不要求#include <stdio.h>来使用printf()?

会议记录:


>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


偶然的你
浏览 840回答 3
3回答

米脂

您最初标记了此C ++,但它似乎是一个C程序。如果范围内没有原型(例如由于省略了#include <stdio.h>),C将自动为函数提供隐式声明。隐式声明为:int printf();这意味着printf是一个返回int且可以接受任意数量参数的函数。这个原型恰好可以为您服务。您应该#include <stdio.h>最后,我要补充的是,当前的C标准(ISO / IEC 9899:1999或俗称“C99”)都不会允许隐式声明,并将该软件将不符合。隐式声明已删除。我相信您的编译器不支持C99。C ++还需要正确的原型,并且不执行隐式声明。

HUWWW

printf()&nbsp;位于标准C库中,并且链接程序始终将标准库链接到您的可执行文件,因此将找到任何标准函数,并且不会出现链接问题。未能包含适当的头会导致使用未原型化的函数,这可能会导致问题,因为C编译器假定该函数没有原型返回,int并且采用了可变数量的参数。因此,请始终包含标头-这是您的安全栅栏。
随时随地看视频慕课网APP
我要回答