我正在使用预处理器宏va_args hack for SQL代码,允许直接在sqlite3.exe中粘贴,以便进行快速的无构建调试:
#define QUOTE(...) #__VA_ARGS__
char const example[] = QUOTE(
INSERT INTO Some_Table(p, q) VALUES(?, ?);
);
https://stackoverflow.com/a/17996915/1848654
然而,这几乎不应该使用__VA_ARGS__
。特别是我的SQL代码包含数百个令牌。
__VA_ARGS__
长度的限制(如果有的话)是什么?
答案 0 :(得分:2)
我唯一能找到的是C99中的这一位(C11仍包含相同的文字):
5.2.4.1翻译限制
- 醇>
实现应能够翻译和执行至少一个程序 包含以下每个限制的至少一个实例: 13)
- [...]
- 一次宏调用中的127个参数
- [...]
- 字符串文字或宽字符串文字中的4095个字符(连接后)
- [...]
[...]
13)实施应尽可能避免强加固定的翻译限制。
因此根据标准没有固定限制。您将不得不检查您的编译器是否记录了任何限制,或者只是尝试支持您抛出的任何内容(直到它耗尽RAM或其他东西)。