C语言showMenu函数隐式声明警告问题求助
解决函数隐式声明警告问题
这个警告的原因很直接:C语言编译器是从上到下逐行编译代码的,当编译到main函数里的showMenu()调用时,还没看到showMenu函数的定义,所以会触发implicit declaration(隐式声明)警告——编译器会临时假设这个函数返回int类型,虽然代码能运行,但这种写法不符合C99及以后的标准,所以会抛出警告。
你可以用两种方法彻底解决这个问题:
方法一:在main函数前添加函数声明
在#include <stdio.h>之后、main函数之前,添加showMenu的函数声明,提前告诉编译器这个函数的返回类型和参数:
#include <stdio.h> // 声明showMenu函数 int showMenu(); int main() { showMenu(); return 0; } int showMenu() { printf(" Herzlich willkommen\n"); printf("(0) Telefonnummern anzeigen\n"); printf("(1) Neue Nummer hinzufügen\n"); printf("\n"); return 0; }
方法二:把showMenu函数移到main函数前面
直接将showMenu的定义放在main函数之前,这样编译器在编译main时已经明确知道这个函数的存在:
#include <stdio.h> int showMenu() { printf(" Herzlich willkommen\n"); printf("(0) Telefonnummern anzeigen\n"); printf("(1) Neue Nummer hinzufügen\n"); printf("\n"); return 0; } int main() { showMenu(); return 0; }
另外补充两个小细节:
- 你代码里的
printf字符串没有加换行符\n,建议加上,这样输出格式会更规范; - 编译输出里的乱码(比如
hinzuf├╝gen)是终端编码和代码编码不匹配导致的,你可以把VS Code的文件编码改成UTF-8并确保终端使用对应编码来解决。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

