关于三维向量加减乘除的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语言宏定义。
不过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)
一个数据对象须要包括不同的数据类型,它能够採用列表这样的形式。
以上是关于关于三维向量加减乘除的C语言宏定义?的主要内容,如果未能解决你的问题,请参考以下文章