Gromacs源码收获(一)

本文记录了作者在研究Gromacs源码过程中遇到的snew宏,探讨了#号在宏参数中的作用,揭示了它如何获取变量名的原理,适合对C++和分子动力学感兴趣的读者。
摘要由CSDN通过智能技术生成

         最近在看Gromacs的源码,万恶的毕设。对于分子动力学的小白来说,做这个真心是一个巨大的挑战啊。但是通过看代码还是能学到些东西的,聊以慰藉。今天看到一个snew宏,死活不懂为什么宏后面的参数前有一个#号,做一个小实验试了下,原来可以得到变量名。

#define _CRT_SECURE_NO_DEPRECATE	
#include <iostream>
using namespace std;
#define snew(ptr, nelem) _snew(#ptr, __FILE__, __LINE__, (ptr), (nelem), sizeof(*(ptr)))

void *save_calloc(const char *name, const char *file, int line,
	size_t nelem, size_t elsize)
{
	void *p;
	p = NULL;
	if ((nelem == 0) || (elsize == 0))
	{
		p = NULL;
	}
	else
	{
		/* emulate calloc(3) with malloc/memset on machines with
		a broken calloc, e.g. in -lgmalloc on cray xt3. */
		if ((p = malloc((size_t)nelem*(size_t)elsize)) == NULL)
		{
			//err message
		}
		memset(p, 0, (size_t)(nelem * elsize));
	}
	return p;
}
template <typename T>
void _snew(const char *name, const char *file, int line,
	T * &ptr, size_t nelem, size_t elsize)
{
	ptr 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值