Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不包含stdio.h的情况下使用scanf()_C - Fatal编程技术网

如何在不包含stdio.h的情况下使用scanf()

如何在不包含stdio.h的情况下使用scanf(),c,C,是否有任何可能的方法来编写C程序而不将stdio.h作为头文件。建议通过声明extern int scanf(char*格式,…)来实现 #include//我希望在不包含此行的情况下使用相同的代码 int main() { char-str[80]; scanf(“%s”,str); 返回0; } 您可以通过以下方式声明scanf函数: extern int scanf(const char *format, ...); extern关键字是可选的,但我喜欢将其包括在内,以提醒您函数是在其他

是否有任何可能的方法来编写C程序而不将
stdio.h
作为头文件。建议通过声明
extern int scanf(char*格式,…)来实现

#include//我希望在不包含此行的情况下使用相同的代码
int main()
{
char-str[80];
scanf(“%s”,str);
返回0;
}

您可以通过以下方式声明
scanf
函数:

extern int scanf(const char *format, ...);
extern关键字是可选的,但我喜欢将其包括在内,以提醒您函数是在其他地方定义的

您的示例如下所示:

extern int scanf(const char *format, ...);

int main ()
{
  char str [80];
  scanf ("%s",str);  
  return 0;
}

在C-89中,由于函数原型是可选的,因此该代码将在编译时不使用#include

说到这里,它被列在“非常糟糕的事情”的列表中-
scanf
可能是一个宏,它可能有一个或多个必需的参数


所以你可以这样做,但这就像晚上开车没有灯一样。即使你认为你知道路,你也会崩溃。

为什么你认为包括<代码> STDIO?H/E>是坏的?你会发现C中,而不是C++,你需要更多的代码。例如,在C中,
NULL
在哪里定义?@WouterHuysentruit我只是想知道是否有可能的解决方案。@cdarke in或实际上header文件不是魔术
#include
实际上是将头文件的内容复制到另一个头文件中。如果确实需要,您可以重新键入头文件的内容。仅当
scanf
作为函数实现时,此操作才有效。C要求中没有任何规定它不能是调用其他函数的宏,如
fscanf
。如果可以使用,你能为我写代码吗。请编辑您的answer@DavidHammen否。ISO C99标准第7.1.4/1节脚注155:“这意味着实现应为每个库函数提供一个实际函数,即使它也为该函数提供一个宏。”除了标准库函数外,还可以提供宏,但它们不能完全取代它们。@DavidHammen:库函数必须作为函数实现。它们也可以实现为宏,但C标准要求它们至少可以通过两种方式作为函数访问。根据C 2011(N1570)7.1.4 1,“函数的任何宏定义都可以通过将函数名称括在括号中来局部抑制,因为该名称后面没有表示宏函数名称扩展的左括号”以及“使用#unde删除任何宏定义也将确保引用实际函数。”此外,C标准明确规定您可以自己声明库函数。C 2011(N1570)7.1.4.2:如果库函数可以在不引用头中定义的任何类型的情况下声明,则也可以在不包含相关头的情况下声明和使用该函数
extern int scanf(const char *format, ...);

int main ()
{
  char str [80];
  scanf ("%s",str);  
  return 0;
}