我正在研究一个越来越复杂的项目。项目由彼此独立的代码段组成,其中包含大量的数学计算,然后是复杂的输出生成。所有用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多个参数。我已经有了很多结构,所以将所有变量放在一个结构中并不是一个选项。
答案 0 :(得分:0)
有多种方法可以实现您的需求。
第一种是使用gcc 嵌套函数。不幸的是,它们是非标准的,因此完全依赖于编译器。您可以在此处找到一些信息:Stack Overflow nested C function和GCC 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