我有一个函数,它接受一个字符数组及其大小:
void store_string (const char *p, size_t size); // 'p' & 'size' stored in map
Run Code Online (Sandbox Code Playgroud)
该函数由宏包装为:
#define STORE_STRING(X) store_string(X, sizeof(X))
Run Code Online (Sandbox Code Playgroud)
我的问题是,我想以某种方式禁止或通知用户只应将字符串文字传递给此函数.因为,如果任何指针或本地数组存储在地图内,那么它们可能会超出范围并造成严重破坏!
是否有任何编译时方式(首选)或至少是运行时方式吗?
iam*_*ind 26
只需将宏更改为:即可知道编译时间:
#define STORE_STRING(X) store_string("" X, sizeof(X))
Run Code Online (Sandbox Code Playgroud)
用法:
char a[] = "abcd", *p;
STORE_STRING(a); // error
STORE_STRING(p); // error
STORE_STRING("abcd"); // ok
Run Code Online (Sandbox Code Playgroud)