目前,我正在使用:
#define p printf(
为了减少我在整个程序中使用printf的字符数,例如,而不是:
printf("Hello, World.");
我能做到:
p"Hello, World.");
我的问题是,是否有可能进一步缩短这一点?例如,将结束括号添加到定义中?像(伪代码):
#define p printf()
还是一些这样的?甚至更简短的方式来做#define?
编辑:在我被遗忘之前,我最好澄清一下。这一点不是为了保存击键,因为我很懒,或者因为我想让它变得不可读。我已经编写了有问题的程序(这是非常可读的,希望不会让我把程序员放到地狱),我很好奇我可以获得多少的字数。这个问题有助于这样做。
答案 0 :(得分:3)
您可以将宏与可变参数一起使用:
#define p(...) printf(__VA_ARGS__)
即使诸如p
之类的名称不是一个好主意,这种语法也可以很好地与条件记录一起使用。例如:
#ifndef NDEBUG
# define log(...) fprintf(stderr, __VA_ARGS__)
#else
# define log(...) ((void)0)
#endif
有时,您可能希望使用格式说明符执行特定操作。为此,您可以利用gcc扩展(以及可能的其他编译器),例如:
#define log(fmt, ...) fprintf(stderr, "Log: "fmt"\n", ##__VA_ARGS__)
请注意,##__VA_ARGS__
不是标准。另见this answer。
答案 1 :(得分:0)
答案 2 :(得分:0)
那是邪恶的。不要试图保存击键并提高打字技巧。以这种方式“简化”代码并不适合使用宏,因为对于普通的C程序员来说,简单地使代码更难以阅读。始终牢记可读性。
请高兴你不必写System.out.println
。
答案 3 :(得分:0)
根据您的需求,考虑puts
这对宏观来说更安全/更好,因为它不需要可变数量的参数。你已经使用了printf并限制了它的使用。此外,用户将键入p(“%d”),程序将会爆炸。