使函数表现得像一个范围

时间:2013-07-25 10:39:36

标签: c function scope

我正在研究一个越来越复杂的项目。项目由彼此独立的代码段组成,其中包含大量的数学计算,然后是复杂的输出生成。所有用pthread包装在套接字内。

整件事看起来像这样:

Main() - >插座 - >线程 - >请求处理 - >一个或多个独立部分

我想将每个独立的代码段放在一个函数中,并且该函数要从调用函数继承变量,但这不起作用。

以下是我想要实现的简化版本:

void func_a(){int c;b+=a;c=1;b+=c;}
int main(){
 int a,b,c;
 a=3;b=2;c=0;
 func_a();
 printf("b:%d c:%d\n",b,c);
 return 1;
}

上面的代码不起作用,但这个工作正常,并做我想要的:

int main(){
 int a,b,c;
 a=3;b=2;c=0;
 {int c;b+=a;c=1;b+=c;}
 printf("b:%d c:%d\n",b,c);
 return 1;
}

我可以将函数的代码放入文件中,然后执行{#include ...},但也许有更好的方法可以做到这一点?

关于管理此类事情的任何其他想法和建议也值得赞赏。

感谢。

P.S。

由于线程化,使用全局范围不是一种选择。只是将变量传递给函数不是一个选项,它将需要30多个参数。我已经有了很多结构,所以将所有变量放在一个结构中并不是一个选项。

1 个答案:

答案 0 :(得分:0)

有多种方法可以实现您的需求。

第一种是使用gcc 嵌套函数。不幸的是,它们是非标准的,因此完全依赖于编译器。您可以在此处找到一些信息:Stack Overflow nested C functionGCC Nested functions manual。如果您不需要可移植性,这可能是一个有效的解决方案。

另一种解决方案可能是使用伪函数的代码定义宏。每次调用宏时,编译器都会替换它,它会自动继承定义到调用函数中的变量。

我用两种解决方案重写了你的例子。

#include <stdio.h>

#define FUNC_A()  {int c;b+=a;c=1;b+=c;} 
#define FUNC_A2(_a,_b) {int c;_b+=_a;c=1;_b+=c;} 

int main(){
   int a,b,c;
   void func_a(){int c;b+=a;c=1;b+=c;}

   // nested solution
    a=3;b=2;c=0;
    func_a();
    printf("b:%d c:%d\n",b,c);

    // macro solution
    a=3;b=2;c=0; 
    FUNC_A(); 
    printf("b:%d c:%d\n",b,c);

    // macro solution
    a=3;b=2;c=0; 
    FUNC_A2(a,b);
    printf("b:%d c:%d\n",b,c);

    return 0;
}

所有解决方案都有相同的结果。 :D