#include <stdio.h>
void main()
{
m();
}
void m()
{
printf("hi");
}
输出
hi
è¦å‘Š
main.c:11:10: warning: conflicting types for 'm' [enabled by default]
void m()
^
main.c:7:9: note: previous implicit declaration of 'm' was here
m();
^
为什么这个程åºæˆåŠŸè¿è¡Œï¼Œå³ä½¿m()在定义之å‰è¢«è°ƒç”¨äº†ï¼Ÿ è¦å‘Šçš„å«ä¹‰æ˜¯ä»€ä¹ˆï¼Ÿ
ç”案 0 :(得分:7)
å¦‚æžœä½ æ²¡æœ‰åœ¨K&amp; RC / C89ä¸å£°æ˜Žä¸€ä¸ªå‡½æ•°ï¼Œå®ƒä¼šè¢«éšå¼å£°æ˜Žä¸ºè¿”回int
。由于您的回å¤void
ï¼Œå› æ¤å˜åœ¨ä¸åŒ¹é…。
å¦‚æžœæ‚¨æ·»åŠ åŽŸåž‹ï¼š
void m(void);
......在它被å¬å”¤ä¹‹å‰ï¼Œå®ƒä¼šè§£å†³é—®é¢˜ã€‚
ç”案 1 :(得分:6)
C89å…è®¸é€šè¿‡å°†ä¼ é€’ç»™å®ƒçš„å‡½æ•°å’Œå‚数的返回类型éšå¼è½¬æ¢ä¸ºint
æ¥å®žçŽ°ã€‚请å‚阅here。
但是,这在C99åŠæ›´é«˜ç‰ˆæœ¬ä¸æ— æ•ˆã€‚æ ‡å‡†ä¸çœç•¥äº†è¿™ä¸€ç‚¹ã€‚您必须为函数声明原型或在main
之å‰å®šä¹‰å®ƒã€‚查看结果here。在这ç§æƒ…况下å˜åœ¨ç¼–译时错误。
ç”案 2 :(得分:3)
ä¸ï¼Œä½†ä½ å¯ä»¥å£°æ˜Žï¼š
#include <stdio.h>
// declare m()
void m();
void main()
{
// use m()
m();
}
// define m()
void m()
{
printf("hi");
}
ç”案 3 :(得分:2)
函数声明需è¦åœ¨ç¬¬ä¸€æ¬¡è°ƒç”¨å‡½æ•°ä¹‹å‰æ·»åŠ 。 完整声明包括返回类型以åŠå‚æ•°çš„æ•°é‡å’Œç±»åž‹ã€‚这也称为函数原型。
æ‰€ä»¥ä½ ç¼ºå°‘åŠŸèƒ½åŽŸåž‹ã€‚
将函数声明void m();
æ·»åŠ åˆ°ä»£ç ä¸ã€‚
修改强>
C程åºå…许使用forward declaration 。
 Â在您的情况下,
   Âvoid m();
表示函数的å‰å‘声明,是函数的原型。处ç†å®Œæ¤å£°æ˜ŽåŽï¼Œç¼–译器将å…许用户在程åºçš„其余部分ä¸å¼•ç”¨å®žä½“m
。必须在æŸå¤„æ供函数的定义(相åŒçš„æ–‡ä»¶æˆ–å…¶ä»–æ–‡ä»¶ï¼Œé“¾æŽ¥å™¨è´Ÿè´£å°†ä¸€ä¸ªæˆ–å¤šä¸ªç›®æ ‡æ–‡ä»¶ä¸çš„特定函数的引用与其定义æ£ç¡®åŒ¹é…,其定义必须是唯一的,在å¦ä¸€ä¸ªä¸ï¼‰ :(æ¥è‡ªç»´åŸºç™¾ç§‘页é¢ï¼‰
è¿™å°±æ˜¯åœ¨ä½ çš„ç¨‹åºä¸ä¸»è¦å·¥ä½œä¹‹åŽå®šä¹‰å‡½æ•°çš„åŽŸå› ã€‚
ç”案 4 :(得分:2)
是 - 使用原型进行调用。
å³ã€‚把
void m();
在文件的开头
ç”案 5 :(得分:1)
我会说,是的。
ä½†æˆ‘æƒ³çº æ£ä½ ,并说明在 之å‰å¯ä»¥è°ƒç”¨ï¼ˆè°ƒç”¨ï¼‰æŸäº›å‡½æ•°ï¼ˆHOISTING)。
我想写的两ç§ä¸åŒç±»åž‹çš„函数是:
表达功能&amp;å‡é€ŸåŠŸèƒ½
1-表达å¼å‡½æ•°ï¼šå‡½æ•°è¡¨è¾¾å¼å¯ä»¥å˜å‚¨åœ¨å˜é‡ä¸ï¼Œå› æ¤å®ƒä»¬ä¸éœ€è¦å‡½æ•°å称。它们也将被命å为匿å函数(没有å称的函数)。è¦è°ƒç”¨ï¼ˆè°ƒç”¨ï¼‰ï¼Œä»–们总是需è¦ä½¿ç”¨å˜é‡å。如果在定义之å‰è°ƒç”¨ï¼Œåˆ™è¿™äº›å‡½æ•°ä¸ä¼šèµ·ä½œç”¨ï¼Œè¿™æ„味ç€æ¤å¤„ä¸ä¼šå‘生æå‡ã€‚我们必须首先定义表达å¼å‡½æ•°ç„¶åŽå†è°ƒç”¨å®ƒã€‚
let lastName = function (family) {
console.log("My last name is " + family);
};
let x = lastName("Lopez");
è¿™æ˜¯ä½ åœ¨ES6ä¸å†™çš„æ–¹å¼ï¼š
lastName = (family) => console.log("My last name is " + family);
x = lastName("Lopez");
2-å‡é€ŸåŠŸèƒ½ï¼šä½¿ç”¨ä»¥ä¸‹è¯æ³•å£°æ˜Žçš„功能ä¸ä¼šç«‹å³æ‰§è¡Œã€‚它们被ä¿å˜ä»¥ä¾›ä»¥åŽä½¿ç”¨ï¼†ï¼ƒ34;ï¼Œå¹¶ä¸”åœ¨å®ƒä»¬è¢«è°ƒç”¨ï¼ˆè¢«è°ƒç”¨ï¼‰æ—¶å°†è¢«æ‰§è¡Œã€‚å¦‚æžœä½ åœ¨å®šä¹‰å®ƒä»¬ä¹‹å‰æˆ–之åŽè°ƒç”¨å®ƒä»¬ï¼Œè¿™äº›ç±»åž‹çš„函数都有效。如果在定义之å‰è°ƒç”¨å‡é€ŸåŠŸèƒ½ - æå‡ - æ£å¸¸å·¥ä½œã€‚
function Name(name) {
console.log("My cat's name is " + name);
}
Name("Chloe");
åŠè£…示例:
Name("Chloe");
function Name(name) {
console.log("My cat's name is " + name);
}