是否可以将变量声明放在外部函数中?在阅读Wikipedia之后:
内联函数是已请求编译器执行内联扩展的函数。换句话说,程序员已经要求编译器在调用函数的每个位置插入函数的完整主体,而不是生成代码以在函数定义的位置调用函数。
我假设以下可能有效。编译器敲击我的手指没多久:(
inline void declaration(){
int a;
}
int main(){
declaration();
a=2;
return 0;
}
答案 0 :(得分:4)
这可能不是如何完成的,但是如果你想了解如何思考内联函数时会发生什么的基本概念。
想象一下编译器将你的代码变成这样的东西,然后你就会明白为什么它不起作用。
int main(){
{
int a;
}
a=2;
return 0;
}
对declaration()
的调用被包含括号的函数内容所取代,因此int a;
在内部作用域中声明,在主函数中不可见。
答案 1 :(得分:2)
不,这是不可能的。
可能的是使用预处理器指令#define
:
#define VARBLOCK int a, b, c; char ca, cb, cc;
int main()
{
VARBLOCK;
a = 2;
}
这是一种不好的做法。此外,这些变量仍然只是在函数范围内可用的变量,而不会共享值。
答案 2 :(得分:1)
否 - 据我所知,内联函数必须表现为语义等效于非内联函数;它不会影响合法代码。这只是一个优化。
特别是,可能在两个函数中都有一个名为a
的变量,但它们是堆栈中的单独变量。
(即使你可以这样做,我建议在可读性方面这是个坏主意。)
答案 3 :(得分:0)
内联函数通常只是一个包含不超过4行的函数,您可能希望编译器在讨论时进行优化,因为执行函数会更快,而不是添加额外的代码。
内联扩展用于消除调用函数时的时间开销。它通常用于经常执行的函数。
因此内联函数并没有什么特别之处,而是编译器可能会对它进行不同的处理。它们不与任何其他函数共享它们的堆栈,这将是main使用在不同范围内创建的变量的唯一方法。
所以我的小费是;写下你的功能,并按照你的意愿对待它们。然后,当你完成后,内联你经常使用的短的。
如果你真的想在另一个函数中创建一个变量,在函数的堆上分配它并返回一个你保存的指针,然后设置为2(你的情况)。 :)请记住释放内存!
答案 4 :(得分:0)
你可以这样做:
#include <stdio.h>
int* GetMyIntAddress(void)
{
static int blah = 0;
return &blah;
}
int main(void)
{
printf("%d\n", *GetMyIntAddress());
*GetMyIntAddress() = 123;
printf("%d\n", *GetMyIntAddress());
return 0;
}
blah
将是GetMyIntAddress()
函数范围内定义的全局变量。
如果将inline
添加到GetMyIntAddress()
的定义中,如果在不同模块中使用内联函数(例如,包含在共享中),则可能会获得blah
的多个独立实例头文件)。