在C语言中,如果没有嵌套函数,如何赋予一个函数另一个函数的作用域?

2024-04-25 04:22:00 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中:

#!/usr/bin/python

def f1(a, b, c, d):
    return a + b + c + d

x = 5;
y = 6;
z = 7;

fm = lambda m: f1(m,x,y,z)
print fm(4)

在Matlab中:

function [retval] = f1(a, b, c, d)
    retval = a + b + c + d;

x = 5;
y = 6;
z = 7;

fm = @(m) f1(m,x,y,z);
fm(4)

我知道没有gcc扩展,C中就没有嵌套函数。如何在C中获得与使用嵌套函数相同的功能?如何在另一个函数(如示例中)中声明变量并将其用作常量?你知道吗


Tags: lambda函数功能示例returnbinusrdef
2条回答

可以使用预处理器宏执行此操作:

#include <stdio.h>

// Global variables?
int x = 5, y= 6, z = 7;

int f1( int a, int b, int c, int d )
{
    return a + b + c + d;
}

#define fm(m) f1((m), x, y, z)

int main()
{
    fprintf( stdout, "%d\n", f1( 4, x, y, z ) );
    fprintf( stdout, "%d\n", fm( 4 ) );
}

或者如果你可以使用C++:

#include <iostream>

// Global variables?
int x = 5, y= 6, z = 7;

int f1( int a, int b, int c, int d )
{
    return a + b + c + d;
}

// Alternative is using default arguments (much cleaner too)
int easy( int a, int b = 5, int c = 6, int d = 7 )
{
    return a + b + c + d;
}

int main()
{
    std::cout << f1( 4, x, y, z ) << std::endl;
    auto fm = [](int m)->int { return f1( m, x, y, z ); };  // Use lambda function
    std::cout << fm( 4 ) << std::endl;
    std::cout << easy( 4 ) << std::endl;
}

在Python示例中,没有什么比“嵌套函数”更好的了——只有一个匿名函数,它可以被一个命名函数替换。FWIW您的Python代码片段很容易用C重写:

# include <stdio.h>

int f1(int a, int b, int c, int d) {
    return a + b + c + d;
}

int x = 5;
int y = 6;
int z = 7;

int fm(int m) {
    return f1(m, x, y, z);
}

int main(int argc, char **argv) {
    printf("%d\n", fm(4));
    return 0;
}

相关问题 更多 >