C 定义原型的正确方法
遇到这样一种情况,我不知道如何以正确的方式定义原型。只看一个简单的例子更容易: A.c.文件:C 定义原型的正确方法,c,prototype,C,Prototype,遇到这样一种情况,我不知道如何以正确的方式定义原型。只看一个简单的例子更容易: A.c.文件: #define foo bar void mon() { foo(); } B.c.文件: void bar() { Do something; } 发出以下警告: 警告:函数没有完整的原型 通常,我会通过以下方式解决: extern void foo(void); 但正如示例所示,函数并不完全存在,而是定义为指向另一个函数。制作原型的正确方法是什么?我认为,会发生以下情况: 编译器将
#define foo bar
void mon() {
foo();
}
B.c.文件:
void bar() {
Do something;
}
发出以下警告:
警告:函数没有完整的原型
通常,我会通过以下方式解决:
extern void foo(void);
但正如示例所示,函数并不完全存在,而是定义为指向另一个函数。制作原型的正确方法是什么?我认为,会发生以下情况: 编译器将宏
foo
替换为bar
,但由于在该阶段bar
没有作为函数声明,编译器会抱怨它找不到它
请参阅更多内容:我认为,发生的情况如下: 编译器将宏
foo
替换为bar
,但由于在该阶段bar
没有作为函数声明,编译器会抱怨它找不到它
请参阅更多信息:如果编译器遇到声明
extern void foo(void)
在#define foo bar
为同一源文件执行后,它将解析为外部无效条(void)
和链接器将只解析条
符号
请注意,bar
的定义与上述声明不一致。bar
的定义应为:
void bar(void) {
// Do something;
}
在C中,与C++不同,(无效)的参数列表与空参数列表有细微的区别。 < P>如果编译器遇到声明<代码>外部空FO(无效);在#define foo bar
为同一源文件执行后,它将解析为外部无效条(void)
和链接器将只解析条
符号
请注意,bar
的定义与上述声明不一致。bar
的定义应为:
void bar(void) {
// Do something;
}
在C中,与C++不同,(空)的参数列表与空的参数列表有细微的区别。它没有定义指向另一个函数。它是一个预处理器指令,指定令牌替换。函数根本没有声明。#define foo bar
你到底想做什么?@Lightness在轨道上比赛,嘿,我什么都不想做。这个警告来自Umon引导加载程序,所以我只是想“纠正”他们的行为方式thinking@StoryTeller,对不起,我这边的词选错了。没有定义指向另一个函数。它是一个预处理器指令,指定令牌替换。函数根本没有声明。#define foo bar
你到底想做什么?@Lightness在轨道上比赛,嘿,我什么都不想做。这个警告来自Umon引导加载程序,所以我只是想“纠正”他们的行为方式thinking@StoryTeller,对不起,我选错词了嘿,谢谢!这实际上是有道理的。所以正确的方法是像我一直做的那样嘿,谢谢!这实际上是有道理的。所以正确的方法是像我一直做的那样