diff CbC-examples/return_check/typedeffed.c @ 42:9e4f9e20b8f1

add some examples.
author kent@teto.cr.ie.u-ryukyu.ac.jp
date Mon, 25 Jan 2010 17:13:59 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CbC-examples/return_check/typedeffed.c	Mon Jan 25 17:13:59 2010 +0900
@@ -0,0 +1,89 @@
+#include<stdio.h>
+
+#if 0
+typedef float testtype;
+testtype good = 33.3f;
+testtype bad = 0.0f;
+void print_testtype(testtype t)
+{
+	printf("return value = %2.3f  good=%2.3f,bad=%2.3f\n", t,good,bad);
+}
+#elif 1
+typedef char testtype;
+testtype good = 33;
+testtype bad  = 0;
+void print_testtype(testtype t)
+{
+	printf("return value = %d, good=%d,bad=%d\n", t,good,bad);
+}
+#elif 0
+typedef double testtype;
+testtype good = 333.3;
+testtype bad  = 0.00;
+void print_testtype(testtype t)
+{
+	printf("return value = %3.3lf, good=%3.3lf,bad=%3.3lf\n", t,good,bad);
+}
+#elif 0
+typedef
+struct {
+	int a;
+	float b;
+	int c[4];
+} testtype;
+testtype good = {33, 33.3, {4,4,4,4}};
+testtype bad  = {0, 00.0, {0,0,0,0}};
+void print_testtype(testtype t)
+{
+	printf( "return value = {\n"
+			"	a = %d\n"
+			"	b = %2.3f\n"
+			"	c = { %d, %d, %d, %d }"
+			"}\n", t.a, t.b,
+			t.c[0],t.c[1],t.c[2],t.c[3]);
+}
+#else
+typedef int testtype;
+testtype good = 33;
+testtype bad = 0;
+void print_testtype(testtype t)
+{
+	printf("return value = %d,  good=%d,bad=%d\n", t,good,bad);
+}
+#endif
+
+typedef void (*RET_FUNC)(testtype, void *);
+
+void g(RET_FUNC func)
+{
+	func(good, NULL);
+}
+
+testtype f_cbc()
+{
+	//__label__ _cbc_exit0;
+	//int retval;
+	void *ret;
+
+	ret = _CbC_return;
+
+	printf("f0: fp = %p\n", __builtin_frame_address(0));
+	printf("__return_func = %p\n", ret);
+	g(ret);
+
+	printf("not good\n");
+	return bad;
+//_cbc_exit0:
+	//printf("f1: fp = 0x%x\n", __builtin_frame_address(0));
+	//return retval;
+}
+
+int main(int argc, char **argv)
+{
+	testtype t;
+	printf("main before: fp = %p\n", __builtin_frame_address(0));
+	t = f_cbc();
+	print_testtype(t);
+	printf("main after: fp = %p\n", __builtin_frame_address(0));
+}
+