#include <stdio.h>
#define DEFINE_BINARY_OPERATION(name, op) \
int name(int a, int b) { \
return a op b; \
}
DEFINE_BINARY_OPERATION(add, +)
DEFINE_BINARY_OPERATION(subtract, -)
int main(void)
{
printf("%d\n", add(5, 6));
printf("%d\n", subtract(5, 6));
}
11
-1
给定 macro 的例子,不需要另一个函数,只需在宏 Package 器中否定函数调用。
#include <stdio.h>
#define add_negated(...) (-add(__VA_ARGS__))
int add(int a, int b)
{
return a + b;
}
int main(void)
{
printf("%d\n", add(5, 6));
printf("%d\n", add_negated(5, 6));
}
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
// Define a function pointer type with the same signature as 'add'
typedef int (*BinaryIntFunction)(int, int);
// Create a function pointer variable and assign 'add' to it
BinaryIntFunction operation = add;
// Use the function pointer to call 'add'
int result = operation(5, 3);
printf("Result: %d\n", result); // Output: Result: 8
// Assign 'subtract' to the same function pointer variable
operation = subtract;
// Use the function pointer to call 'subtract'
result = operation(5, 3);
printf("Result: %d\n", result); // Output: Result: 2
return 0;
}
3条答案
按热度按时间zd287kbt1#
我想使用一个宏来生成一个具有相同类型但不同返回值的函数。
请注意,你的两个例子(过去)不同(在问题被编辑之前)。
在前面的 typeof 例子中,你可以编写一个宏,生成具有相同签名的函数,不同之处仅在于键标记:
给定 macro 的例子,不需要另一个函数,只需在宏 Package 器中否定函数调用。
如果你需要一个函数指针,那么这是两种思想的一个非常严格的组合,根本不能很好地扩展。如果您的实际用例是不平凡的,那么您可能应该手工编写函数及其签名。
ctehm74n2#
函数不能用
typedef
或typeof
表达式创建,因为这些类型不包含任何关于参数名称的信息,并且函数定义需要其参数的名称。虽然你可以用
typedef
或typeof
* 声明 * 一个函数,但你不能用那种方式 * 定义 * 一个函数。dojqjjoe3#
在C语言中,你不能像在其他语言中一样,使用
typeof
构造或类似的机制直接创建一个与另一个函数类型相同的新函数。但是,您可以通过使用函数指针并定义与现有函数具有相同签名(参数类型和返回类型)的新函数来实现相对类似的功能。下面是一个示例: