使用#define(添加结束括号)进一步缩短printf,或缩短#define C

时间:2013-02-23 03:41:57

标签: c

目前,我正在使用:

#define p printf(

为了减少我在整个程序中使用printf的字符数,例如,而不是:

printf("Hello, World.");

我能做到:

p"Hello, World.");

我的问题是,是否有可能进一步缩短这一点?例如,将结束括号添加到定义中?像(伪代码):

#define p printf()

还是一些这样的?甚至更简短的方式来做#define?

编辑:在我被遗忘之前,我最好澄清一下。这一点不是为了保存击键,因为我很懒,或者因为我想让它变得不可读。我已经编写了有问题的程序(这是非常可读的,希望不会让我把程序员放到地狱),我很好奇我可以获得多少的字数。这个问题有助于这样做。

4 个答案:

答案 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”),程序将会爆炸。