我正在使用头文件合并两个C程序。
第一个程序
#include<explore.h>
int main()
{
int a =10;
explore();
}
探索计划
#include<stdio.h>
int explore()
{
// I want to use the value of a. Can I use it? How can sue it?
}
我想在探索程序文件中使用a
中explore()
的值。
我可以使用它吗?怎么可以使用呢?
答案 0 :(得分:1)
好的,先关闭。使用现在的代码,除了a
函数之外,你将无法在任何地方使用int main
,因为它是该函数的局部变量。
要么将其作为参数传递,要么将其声明为全局(以及 extern )。无论哪种方式,我都选择将其作为参数传递,如果a
将被函数explore
更改,则可以执行以下两项操作之一:
int explore( int val)
{
//do stuff
return new_val;
}
//call:
a = explore(a);//assigns return int to a
或者,如果返回的int表示某种状态,则将指针传递给a
。这可能,如果你是指针的新手,似乎是一种过度复杂化的确定方法,但它非常常见且非常有用(添加了关于为什么这对底部有用的注释):
int explore(int *val)
{
*val += 123;//add 123 to val's value
//this is NOT the same as val += 123, because that's shifting the pointer!
return 0;
}
//call:
int return_val = explore(&a);//pass &[address-of]a
现在,链接两个源文件很简单,但是你说你正在使用一个头文件,一切都很好,但你似乎没有把它包含在任何地方,也没有显示它的样子。我怀疑你在编译代码时遇到了麻烦......如果是这样,请告诉我们你尝试过的东西(你如何编译代码),以及你得到的错误。
如果您需要一个如何手动链接2个源文件的基本示例:Here's a previous answer of mine that shows, step by step, how to link 2 files
为什么指针?:
很多原因,真的。这里只是几个:
最后一点至关重要。如果您要将a
传递给explore
进行一些复杂的计算,请在此过程中更改a
的值。如果,在功能的一半,某些东西变成梨形,你如何通知呼叫者a
的值不再可靠?简单:
int complex_function( int *val)
{
_Bool negative = *val > 0 ? false : true;
//do all sorts of magic stuff
//val wasn't negative, but is now, possible maxed int?
if (negative == false && *val < 0) return -1;//notify using -1
return 0;//usually, 0 means everything went well ok
}
//call like so:
if ((complex_function(&a)) != 0) exit( EXIT_FAILURE);//it's all gone wrong
//else, continue
现在指针非常有用。它并不需要你弄乱所有太多的临时变量,在整个地方创建值的副本,并比较它们以得出相同的结论。
答案 1 :(得分:0)
以explore
为参数调用a
。
尽管如此,你似乎并没有两个“程序”。一个程序中有两个源文件。因此,在两个部分中使用a
的另一种方法是在main.c中定义a
并在explore.h中将其声明为“extern”。但请记住,a
对您的程序来说有点“全球化”。
答案 2 :(得分:0)
将a的值(或指针)传递给探索函数
传递值(a的副本)
#include<stdio.h>
int explore(int value)
{
}
通过引用传递(指向a的指针)
#include<stdio.h>
int explore(int *value)
{
}
答案 3 :(得分:0)
更改为int explore(int some_var)
,然后您可以在此功能中自由使用some_var
。在main
中,您需要拨打explore(a)
。
答案 4 :(得分:0)
首先,它们不是两个程序。这是一个单一的计划。你正在写一个函数。如果要将a
的值传递给该函数,则需要将其作为参数传递:
#include<explore.h>
int main()
{
int a =10;
explore(a);
}
#include<stdio.h>
int explore(int a)
{
// you can now use a here
}