0

我正在做一个越来越复杂的项目。项目由彼此独立的代码部分组成,其中包含大量数学计算,然后是复杂的输出生成。所有这些都用 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 ... },但也许有更好的方法来做到这一点?

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

谢谢。

附言

由于线程,使用全局范围不是一种选择。仅将变量传递给函数不是一种选择,它将需要 30 多个参数。我已经有一堆结构在进行,因此将所有变量放入单个结构中并不是一个选项。

4

1 回答 1

0

有不同的方法来实现你所需要的。

首先是使用 gcc嵌套函数。不幸的是,它们是非标准的,因此完全依赖于编译器。您可以在此处找到一些信息:堆栈溢出嵌套 C 函数GCC 嵌套函数手册。如果您不需要可移植性,这可能是一个有效的解决方案。

另一种解决方案可能是使用伪函数的代码定义一个宏。编译器将在每次调用宏时进行替换,并自动继承调用函数中定义的变量。

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

#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

于 2013-07-25T11:58:19.137 回答