最近在看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