gpt4 book ai didi

c - 为什么要定义一个函数原型(prototype),然后定义一个同名的预处理器宏?

转载 作者:太空狗 更新时间:2023-10-29 16:34:21 26 4
gpt4 key购买 nike

我正在读一本关于 C 的书,在作者代码的某处我找到了一个函数原型(prototype)的定义,然后是一个同名的宏,并且在任何 中都没有函数本身的定义.h.c 文件。

我的意思是这样的:

int print_my_stufff(char *stuff);
#define print_my_stuff(A) (printf("%s\n", A))
/* and print-my-stuff() function never defined anywhere else */

代码有效,但我只是不明白为什么他首先需要一个函数原型(prototype)?他就不能写个宏吗?重点是什么?是告诉编译器应该将宏计算为返回 int 的表达式还是什么?删除原型(prototype)似乎并没有改变行为。作者没有解释这一点。

最佳答案

这是一种过时的做法,来自 inline 函数之前。如果您调用 print_my_stuff("hello") 中的函数,那么预处理器将看到调用语法并插入宏的内容。如果您使用其他名称,如 f_ptr = &print_my_stuff,编译器将使用实际函数。

调用函数 (print_my_stuff)("hello") 也会绕过宏。一些偏执的风格指南甚至要求用括号括起某些函数名称,因为宏是邪恶的。

关于c - 为什么要定义一个函数原型(prototype),然后定义一个同名的预处理器宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34447143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com