diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-09-13 11:26:42 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-09-13 11:26:42 +0000 |
commit | 6c255d0dde4be530ae1cc09859721c6d20c985c7 (patch) | |
tree | 99d43d0a985dbbd59e9fa40226c5d197df1c5ad9 /ruby.h | |
parent | 97c7c50245253a92b3ab86fc8c57e417c7e76cdd (diff) | |
download | ruby-6c255d0dde4be530ae1cc09859721c6d20c985c7.tar.gz |
* ruby.h (PRINTF_ARGS): new macro for printf style argument checking.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9147 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ruby.h')
-rw-r--r-- | ruby.h | 22 |
1 files changed, 16 insertions, 6 deletions
@@ -31,6 +31,13 @@ extern "C" { # define NOINLINE(x) x #endif +#ifdef __GNUC__ +#define PRINTF_ARGS(decl, string_index, first_to_check) \ + decl __attribute__((format(printf, string_index, first_to_check))) +#else +#define PRINTF_ARGS(decl, string_index, first_to_check) decl +#endif + #include "defines.h" #ifdef HAVE_STDLIB_H @@ -539,17 +546,20 @@ VALUE rb_equal _((VALUE,VALUE)); RUBY_EXTERN VALUE ruby_verbose, ruby_debug; -NORETURN(void rb_raise __((VALUE, const char*, ...))); -NORETURN(void rb_fatal __((const char*, ...))); -NORETURN(void rb_bug __((const char*, ...))); +PRINTF_ARGS(NORETURN(void rb_raise __((VALUE, const char*, ...))), 2, 3); +PRINTF_ARGS(NORETURN(void rb_fatal __((const char*, ...))), 1, 2); +PRINTF_ARGS(NORETURN(void rb_bug __((const char*, ...))), 1, 2); NORETURN(void rb_sys_fail _((const char*))); NORETURN(void rb_iter_break _((void))); NORETURN(void rb_exit _((int))); NORETURN(void rb_notimplement _((void))); -void rb_warning __((const char*, ...)); /* reports if `-w' specified */ -void rb_sys_warning __((const char*, ...)); /* reports if `-w' specified */ -void rb_warn __((const char*, ...)); /* reports always */ +/* reports if `-w' specified */ +PRINTF_ARGS(void rb_warning __((const char*, ...)), 1, 2); +/* reports if `-w' specified */ +PRINTF_ARGS(void rb_sys_warning __((const char*, ...)), 1, 2); +/* reports always */ +PRINTF_ARGS(void rb_warn __((const char*, ...)), 1, 2); VALUE rb_each _((VALUE)); VALUE rb_yield _((VALUE)); |