关于三维向量加减乘除的C语言宏定义?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于三维向量加减乘除的C语言宏定义?相关的知识,希望对你有一定的参考价值。

如何利用C语言宏定义,进行三维向量处理?
比如,我们可以写子函数
/* return vector difference c = a-b */
Vector3 V3Sub(Vector3 *a, Vector3 *b)
Vector3 *c;
c->x = a->x - b->x;
c->y = a->y - b->y;
c->z = a->z - b->z;
return(c);

然后在main函数中可以直接调用V3Sub。
那么上面的子函数可以改为C语言宏定义的方式吗?
这样在main函数里面就可以直接进行宏替换,而不是调用。
自己已经解决。
在CUDA kernel函数里面是不能调用host里面申明的函数,但是宏定义确实可以调用的。
但是如果你在在main函数申明是加上 __device__ __host__ 函数名,则kernel函数却可以调用。

/* return vector difference c = a-b */
__device__ __host__ Vector3 (Vector3 *a, Vector3 *b, Vector3 *c)
//Vector3 *c;
c->x = a->x - b->x;
c->y = a->y - b->y;
c->z = a->z - b->z;
return(c);

总结一下:刚刚学习CUDA,对她了解不够。今后还得多看文档说明,多练习。


1.
a,b是全局变量.
如果函数定义了和全局变量相同的局部变量,局部变量优先
所以,fun1中的a,b是全局变量
main中打印的也是全局变量
而fun2中的a,b是局部变量,打印的是传进去的参数值

2.有区别,a,b的作用范围和生存周期不同

3.是全局变量的定义,不是宏定义

4. 结果就是CDEF追问

1楼,你会不会C编程啊?
重复一下我的问题:
将Vector3 V3Sub(Vector3 *a, Vector3 *b) 写成C语言宏定义。

参考技术A #define V3Sub(a, b,c) c->x = a->x - b->x;c->y = a->y - b->y;c->z = a->z - b-z;
不过abc都要先定义追问

你这个宏定义肯定有问题。不过可以考虑进一步改进处理。

追答

#define V3Sub(a, b,c) ((c)->x = (a)->x - (b)->x,(c)->y = (a)->y - (b)->y,(c)->z = (a)->z - (b)-z,c)
差不多了吧,c一定要预先定义的

追问

算了,不用了。我找到其他办法解决次问题了。
可以在此和你交流一下。
在CUDA kernel函数里面是不能调用host里面申明的函数,但是宏定义确实可以调用的。
但是如果你在在main函数申明是加上 __device__ __host__ 函数名,则kernel函数却可以调用。详细见我上面的答案。

本回答被提问者采纳

R语言基础-数组和列表

数组(array)

一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的.
数组函数是array(),语法是:array(dadta, dim),当中data必须是同一类型的数据。dim是各维的长度组成的向量。
1、产生一个三维和四维数组。

例1:xx <- array(1:24, c(3, 4, 2)) #一个三维数组
例2:yy <- array(1:36, c(2, 3, 3, 2)) #一个四维数组
 
2、dim()函数可将向量转化成数组或矩阵。
例1:xx <- 1:24; dim(xx) <- c(3, 4, 2); xx #效果同array(1:24, c(3, 4, 2))
例2:zz <- 1:10; dim(zz) <- c(2, 5); zz #效果同matrix(1:10, 2, 5)
 
列表(list)
向量、矩阵和数组的元素必须是同一类型的数据。

一个数据对象须要包括不同的数据类型,它能够採用列表这样的形式。

创建列表可用list()函数,语法是:list(name1 = component1, name2 = component2, ...)。
1、创建一个列表
例1: xx <- rep(1:2, 3:4)
yy <- c(‘Mr A‘, ‘Mr B‘, ‘Mr C‘, ‘Mr D‘, ‘Mr E‘, ‘Mr D‘, ‘Mr F‘)
zz <- ‘discussion group‘
name.list <- list(group = xx, name = yy, decription = zz) #创建了一个名为"name.list"的列表
name.list$n[name.list$g == 2]
length(name.list)
mode(name.list)
names(name.list)

以上是关于关于三维向量加减乘除的C语言宏定义?的主要内容,如果未能解决你的问题,请参考以下文章

怎样用C语言编写一个简单的可以进行加减乘除运算混合运算的计算器?

广播关于numpy向量的说明

广播关于numpy向量的说明

R语言实战——矩阵与列表的操作示例

R语言入门:向量的运算

C语言关于表达式求值