/*
* Recommended alloc parameters for "small" contexts that are never expected
* to contain much data (for example, a context to contain a query plan).
*/
#define ALLOCSET_SMALL_MINSIZE 0
#define ALLOCSET_SMALL_INITSIZE (1 * 1024)
#define ALLOCSET_SMALL_MAXSIZE (8 * 1024)
#define ALLOCSET_SMALL_SIZES
ALLOCSET_SMALL_MINSIZE, ALLOCSET_SMALL_INITSIZE, ALLOCSET_SMALL_MAXSIZE
我不明白上一个marco,我用
printf("%d", ALLOCSET_SMALL_SIZES);
然后警告:
warning: too many arguments for format [-Wformat-extra-args]
,也返回0。
类似的帖子我发现:#定义指令与多个替换?
更新:跳跃源代码,得到它。
类似
foo(size_t,size_t,size_t)
可以直接用
foo(ALLOCSET_DEFAULT_SIZES)
给定以下代码片段:
#define ALLOCSET_SMALL_SIZES
ALLOCSET_SMALL_MINSIZE, ALLOCSET_SMALL_INITSIZE, ALLOCSET_SMALL_MAXSIZE
宏ALLOCSET_SMALL_SIZES
被替换为:
ALLOCSET_SMALL_MINSIZE, ALLOCSET_SMALL_INITSIZE, ALLOCSET_SMALL_MAXSIZE
被替换为:
0,
(1 * 1024),
(8 * 1024)
是单独的参数。然后在对printf ()
的调用中:
printf("%d", ALLOCSET_SMALL_SIZES);
ALLOCSET_SMALL_SIZES
被0, (1 * 1024), (8 * 1024)
取代
或
printf ("%d", 0, (1 * 1024), (8 * 1024));
因此发出警告。
修复:
替换为:
printf ("%d %d %d", 0, (1 * 1024), (8 * 1024));
参见:为什么在C中使用宏?C宏有什么用?