是否可以将C函数alloca
包装成“另一个”?(当然只有宏)
类似于:
#define printStackFrameAddr(_fnc) \
printf("%-20s: %p \n", _fnc, __builtin_frame_address(0))
void _my_init(void *mem)
{
}
void *notSafeAlloca(size_t num)
{
void *mem;
printStackFrameAddr("notSafeAlloca");
mem = alloca(num);
_my_init(mem);
return mem;
}
#define safeAlloca(_num) \
({ \
void *ret = alloca(_num); \
_my_init(ret); \
printStackFrameAddr("safeAlloca"); \
ret;})
int main(int argc, const char * argv[])
{
printStackFrameAddr("main");
{ /* <- creates no new stack frame ? */
int *array = notSafeAlloca(sizeof(* array) * 4);
printStackFrameAddr("main");
printf("\t%-20s: %p\n", "array", array);
}
{ /* <- creates no new stack frame ? */
int *array = safeAlloca(sizeof(* array) * 4);
printStackFrameAddr("main");
printf("\t%-20s: %p\n", "array", array);
}
return 0;
}
main : 0x7fff5fbff8d0
notSafeAlloca : 0x7fff5fbff860
main : 0x7fff5fbff8d0
array : 0x7fff5fbff820
safeAlloca : 0x7fff5fbff8d0
main : 0x7fff5fbff8d0
array : 0x7fff5fbff888
那么,上述做法安全吗?
我找到了解决问题的办法:)
void *_my_alloca(void *memory)
{
// init memory & stuff
return memory;
}
#define my_alloca(_size) _my_alloca(alloca(_size))
int main(int argc, const char **argv)
{
int *array = my_alloca(sizeof(* array) * 4);
}
在 Go 语言开篇中我们已经知道,Go 语言与 C 语言之间有着千丝万缕的关系,甚至被称之为 21 世纪的C语言。 所以在 Go 与 C 语言互操作方面,Go 更是提供了强大的支持。尤其是在 Go 中使用 C,你甚至可以直接在 Go 源文件中编写 C 代码,这是其他语言所无法望其项背的。 格式: 在 import "C" 之前通过单行注释或者通过多行注释编写C语言代码 在 import "C" 之
在 Go 代码中通过 //export Go函数名称 导出Go的函数名称 在 C 代码中通过 extern 返回值类型 Go函数名称(形参列表); 声明 Go 中导出的函数名称 注意://export Go 函数名称 和 extern 返回值类型 Go函数名称(形参列表); 不能在同一个文件中 package main import "C" import "fmt" // 导出Go函数声
Go 函数 Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。 以下实例中,我们创建了函数 getSequence() ,返回另外一个函数。该函数的目的是在闭包中递增 i 变量,代码如下: package main import "fmt" func getSequence() func() int { i:
主要内容:C语言无参函数的定义,C语言有参函数的定义,函数不能嵌套定义函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数。 将代码段封装成函数的过程叫做 函数定义。 C语言无参函数的定义 如果函数不接收用户传递的数据,那么定义时可以不带参数。如下所示: dataType functionName(){ //
本文向大家介绍C语言函数语法详解,包括了C语言函数语法详解的使用技巧和注意事项,需要的朋友参考一下 1、概述 在C语言中,函数是来完成子程序或者某个模块的功能。有主程序或者其他函数调用,其他函数之间可以相互调用。同一函数可以被一个或多个函数任意次调用。 注意: a、一个C程序有一个或多个程序模块组成,每一个程序模块作为一个源程序文件。一个源文件可以为多个C程序共用。
1. 函数的定义 程序是由一个个函数组成的。我们之前虽然没有正式介绍函数,但是我们早已经开始使用函数了。因为离开了函数,我们的程序没有办法正常的工作。只不过我们使用的是 C 语言内置的标准函数库。 那么函数是什么? 函数是由一组语句组成完成至少一个特定任务的语句的集合。在 C 语言中,我们必须要包含一个函数,就是我们最开始介绍的 mian 函数。 2. 为什么需要函数? 函数帮助我们可以减少代码的