summaryrefslogtreecommitdiff
path: root/ruby.h
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-09-13 11:26:42 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-09-13 11:26:42 +0000
commit6c255d0dde4be530ae1cc09859721c6d20c985c7 (patch)
tree99d43d0a985dbbd59e9fa40226c5d197df1c5ad9 /ruby.h
parent97c7c50245253a92b3ab86fc8c57e417c7e76cdd (diff)
* 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.h22
1 files changed, 16 insertions, 6 deletions
diff --git a/ruby.h b/ruby.h
index 690e1408f8..e37762a996 100644
--- a/ruby.h
+++ b/ruby.h
@@ -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));