-2

目前,我正在使用:

#define p printf(

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

printf("Hello, World.");

我可以:

p"Hello, World.");

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

#define p printf()

还是这样的?或者更短的#define 方法?

编辑:在我被否决之前,我最好澄清一下。这样做的目的不是因为我懒惰,或者因为我想让它不可读而保存击键。我已经编写了有问题的程序(它可读性很强,希望不会让我陷入程序员的地狱),我很好奇我能得到多低的字符数。这个问题将有助于这样做。

4

4 回答 4

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__标准的。另请参阅此答案

于 2013-02-23T03:52:35.117 回答
0

是的,您的宏可以接受参数

http://gcc.gnu.org/onlinedocs/cpp/Macro-Arguments.html

于 2013-02-23T03:44:43.090 回答
0

那是邪恶的。停止尝试保存击键并提高您的打字技巧。以这种方式“简化”代码并不适合使用宏,因为您只会让普通 C 程序员更难阅读您的代码。始终牢记可读性。

很高兴你不必写System.out.println

于 2013-02-23T03:48:39.277 回答
0

根据您展示的需求,考虑看跌期权

这对宏化会更安全/更好,因为它不需要可变数量的参数。您已经使用 printf 并限制了它的使用。此外,用户将键入 p("%d") 并且程序将崩溃。

于 2013-02-23T03:51:17.037 回答