如何在不包含stdio.h的情况下使用scanf()
是否有任何可能的方法来编写C程序而不将如何在不包含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关键字是可选的,但我喜欢将其包括在内,以提醒您函数是在其他
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;
}