contactandyc / another-c-library Goto Github PK
View Code? Open in Web Editor NEWI've always thought it would be interesting to try and build the core algorithms. My hope is that others can benefit from this.
License: Apache License 2.0
I've always thought it would be interesting to try and build the core algorithms. My hope is that others can benefit from this.
License: Apache License 2.0
Hey, this guide is amazing.
Just came across the following error in 2_timing/10_timer.
Linux users will suffer this error, but OS X users won't see it:
https://unix.stackexchange.com/questions/194480/why-is-timer-t-defined-in-time-h-on-linux-but-not-os-x
Changing timer_t
to my_timer_t
is one fix.
:~/another-c-library/illustrations/2_timing/10_timer$ make
gcc -O3 timer.c test_timer.c -o test_timer
In file included from /usr/include/time.h:47,
from timer.c:20:
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:7:19: error: conflicting types for ‘timer_t’
7 | typedef __timer_t timer_t;
| ^~~~~~~
In file included from timer.c:17:
timer.h:21:24: note: previous declaration of ‘timer_t’ was here
21 | typedef struct timer_s timer_t;
| ^~~~~~~
timer.c:30:10: error: conflicting types for ‘timer_init’
30 | timer_t *timer_init(int repeat) {
| ^~~~~~~~~~
In file included from timer.c:17:
timer.h:28:10: note: previous declaration of ‘timer_init’ was here
28 | timer_t *timer_init(int repeat);
| ^~~~~~~~~~
timer.c: In function ‘timer_init’:
timer.c:32:4: error: request for member ‘repeat’ in something not a structure or union
32 | t->repeat = repeat;
| ^~
timer.c:33:4: error: request for member ‘base’ in something not a structure or union
33 | t->base = t->time_spent = t->start_time = 0;
| ^~
timer.c:33:14: error: request for member ‘time_spent’ in something not a structure or union
33 | t->base = t->time_spent = t->start_time = 0;
| ^~
timer.c:33:30: error: request for member ‘start_time’ in something not a structure or union
33 | t->base = t->time_spent = t->start_time = 0;
| ^~
timer.c: At top level:
timer.c:37:6: error: conflicting types for ‘timer_destroy’
37 | void timer_destroy(timer_t *t) {
| ^~~~~~~~~~~~~
In file included from timer.c:17:
timer.h:31:6: note: previous declaration of ‘timer_destroy’ was here
31 | void timer_destroy(timer_t *t);
| ^~~~~~~~~~~~~
timer.c:42:5: error: conflicting types for ‘timer_get_repeat’
42 | int timer_get_repeat(timer_t *t) {
| ^~~~~~~~~~~~~~~~
In file included from timer.c:17:
timer.h:34:5: note: previous declaration of ‘timer_get_repeat’ was here
34 | int timer_get_repeat(timer_t *t);
| ^~~~~~~~~~~~~~~~
timer.c: In function ‘timer_get_repeat’:
timer.c:43:11: error: request for member ‘repeat’ in something not a structure or union
43 | return t->repeat;
| ^~
timer.c: At top level:
timer.c:47:6: error: conflicting types for ‘timer_set_repeat’
47 | void timer_set_repeat(timer_t *t, int repeat) {
| ^~~~~~~~~~~~~~~~
In file included from timer.c:17:
timer.h:37:6: note: previous declaration of ‘timer_set_repeat’ was here
37 | void timer_set_repeat(timer_t *t, int repeat);
| ^~~~~~~~~~~~~~~~
timer.c: In function ‘timer_set_repeat’:
timer.c:48:4: error: request for member ‘repeat’ in something not a structure or union
48 | t->repeat = repeat;
| ^~
timer.c: At top level:
timer.c:52:6: error: conflicting types for ‘timer_subtract’
52 | void timer_subtract(timer_t *t, timer_t *sub) {
| ^~~~~~~~~~~~~~
In file included from timer.c:17:
timer.h:40:6: note: previous declaration of ‘timer_subtract’ was here
40 | void timer_subtract(timer_t *t, timer_t *sub);
| ^~~~~~~~~~~~~~
timer.c: In function ‘timer_subtract’:
timer.c:53:4: error: request for member ‘base’ in something not a structure or union
53 | t->base -= (sub->time_spent+sub->base);
| ^~
timer.c:53:18: error: request for member ‘time_spent’ in something not a structure or union
53 | t->base -= (sub->time_spent+sub->base);
| ^~
timer.c:53:34: error: request for member ‘base’ in something not a structure or union
53 | t->base -= (sub->time_spent+sub->base);
| ^~
timer.c: At top level:
timer.c:56:6: error: conflicting types for ‘timer_add’
56 | void timer_add(timer_t *t, timer_t *add) {
| ^~~~~~~~~
In file included from timer.c:17:
timer.h:42:6: note: previous declaration of ‘timer_add’ was here
42 | void timer_add(timer_t *t, timer_t *add);
| ^~~~~~~~~
timer.c: In function ‘timer_add’:
timer.c:57:4: error: request for member ‘base’ in something not a structure or union
57 | t->base += (add->time_spent+add->base);
| ^~
timer.c:57:18: error: request for member ‘time_spent’ in something not a structure or union
57 | t->base += (add->time_spent+add->base);
| ^~
timer.c:57:34: error: request for member ‘base’ in something not a structure or union
57 | t->base += (add->time_spent+add->base);
| ^~
timer.c: At top level:
timer.c:60:6: error: conflicting types for ‘timer_start’
60 | void timer_start(timer_t *t) {
| ^~~~~~~~~~~
In file included from timer.c:17:
timer.h:45:6: note: previous declaration of ‘timer_start’ was here
45 | void timer_start(timer_t *t);
| ^~~~~~~~~~~
timer.c: In function ‘timer_start’:
timer.c:63:4: error: request for member ‘start_time’ in something not a structure or union
63 | t->start_time = (tv.tv_sec * 1000000) + tv.tv_usec;
| ^~
timer.c: At top level:
timer.c:66:6: error: conflicting types for ‘timer_stop’
66 | void timer_stop(timer_t *t) {
| ^~~~~~~~~~
In file included from timer.c:17:
timer.h:48:6: note: previous declaration of ‘timer_stop’ was here
48 | void timer_stop(timer_t *t);
| ^~~~~~~~~~
timer.c: In function ‘timer_stop’:
timer.c:70:9: error: request for member ‘start_time’ in something not a structure or union
70 | v -= t->start_time;
| ^~
timer.c:71:4: error: request for member ‘time_spent’ in something not a structure or union
71 | t->time_spent += v;
| ^~
timer.c: At top level:
timer.c:74:8: error: conflicting types for ‘timer_ns’
74 | double timer_ns(timer_t *t) {
| ^~~~~~~~
In file included from timer.c:17:
timer.h:54:8: note: previous declaration of ‘timer_ns’ was here
54 | double timer_ns(timer_t *t);
| ^~~~~~~~
timer.c: In function ‘timer_ns’:
timer.c:75:15: error: request for member ‘repeat’ in something not a structure or union
75 | double r = t->repeat * 1.0;
| ^~
timer.c:76:16: error: request for member ‘time_spent’ in something not a structure or union
76 | double ts = t->time_spent + t->base;
| ^~
timer.c:76:32: error: request for member ‘base’ in something not a structure or union
76 | double ts = t->time_spent + t->base;
| ^~
timer.c: At top level:
timer.c:80:8: error: conflicting types for ‘timer_us’
80 | double timer_us(timer_t *t) {
| ^~~~~~~~
In file included from timer.c:17:
timer.h:55:8: note: previous declaration of ‘timer_us’ was here
55 | double timer_us(timer_t *t);
| ^~~~~~~~
timer.c: In function ‘timer_us’:
timer.c:81:15: error: request for member ‘repeat’ in something not a structure or union
81 | double r = t->repeat * 1.0;
| ^~
timer.c:82:16: error: request for member ‘time_spent’ in something not a structure or union
82 | double ts = t->time_spent + t->base;
| ^~
timer.c:82:32: error: request for member ‘base’ in something not a structure or union
82 | double ts = t->time_spent + t->base;
| ^~
timer.c: At top level:
timer.c:86:8: error: conflicting types for ‘timer_ms’
86 | double timer_ms(timer_t *t) {
| ^~~~~~~~
In file included from timer.c:17:
timer.h:56:8: note: previous declaration of ‘timer_ms’ was here
56 | double timer_ms(timer_t *t);
| ^~~~~~~~
timer.c: In function ‘timer_ms’:
timer.c:87:15: error: request for member ‘repeat’ in something not a structure or union
87 | double r = t->repeat * 1.0;
| ^~
timer.c:88:16: error: request for member ‘time_spent’ in something not a structure or union
88 | double ts = t->time_spent + t->base;
| ^~
timer.c:88:32: error: request for member ‘base’ in something not a structure or union
88 | double ts = t->time_spent + t->base;
| ^~
timer.c: At top level:
timer.c:92:8: error: conflicting types for ‘timer_sec’
92 | double timer_sec(timer_t *t) {
| ^~~~~~~~~
In file included from timer.c:17:
timer.h:57:8: note: previous declaration of ‘timer_sec’ was here
57 | double timer_sec(timer_t *t);
| ^~~~~~~~~
timer.c: In function ‘timer_sec’:
timer.c:93:15: error: request for member ‘repeat’ in something not a structure or union
93 | double r = t->repeat * 1.0;
| ^~
timer.c:94:16: error: request for member ‘time_spent’ in something not a structure or union
94 | double ts = t->time_spent + t->base;
| ^~
timer.c:94:32: error: request for member ‘base’ in something not a structure or union
94 | double ts = t->time_spent + t->base;
| ^~
In file included from /usr/include/x86_64-linux-gnu/sys/types.h:130,
from /usr/include/stdlib.h:394,
from test_timer.c:20:
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h:7:19: error: conflicting types for ‘timer_t’
7 | typedef __timer_t timer_t;
| ^~~~~~~
In file included from test_timer.c:17:
timer.h:21:24: note: previous declaration of ‘timer_t’ was here
21 | typedef struct timer_s timer_t;
| ^~~~~~~
test_timer.c: In function ‘main’:
test_timer.c:36:28: warning: initialization of ‘void **’ from incompatible pointer type ‘timer_t *’ {aka ‘struct timer_s *’} [-Wincompatible-pointer-types]
36 | timer_t *overall_timer = timer_init(repeat_test);
| ^~~~~~~~~~
test_timer.c:41:55: warning: passing argument 1 of ‘timer_get_repeat’ from incompatible pointer type [-Wincompatible-pointer-types]
41 | timer_t *copy_timer = timer_init(timer_get_repeat(overall_timer));
| ^~~~~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:34:31: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
34 | int timer_get_repeat(timer_t *t);
| ~~~~~~~~~^
test_timer.c:41:27: warning: initialization of ‘void **’ from incompatible pointer type ‘timer_t *’ {aka ‘struct timer_s *’} [-Wincompatible-pointer-types]
41 | timer_t *copy_timer = timer_init(timer_get_repeat(overall_timer));
| ^~~~~~~~~~
test_timer.c:42:17: warning: passing argument 1 of ‘timer_start’ from incompatible pointer type [-Wincompatible-pointer-types]
42 | timer_start(copy_timer);
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:45:27: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
45 | void timer_start(timer_t *t);
| ~~~~~~~~~^
test_timer.c:46:16: warning: passing argument 1 of ‘timer_stop’ from incompatible pointer type [-Wincompatible-pointer-types]
46 | timer_stop(copy_timer);
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:48:26: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
48 | void timer_stop(timer_t *t);
| ~~~~~~~~~^
test_timer.c:48:55: warning: passing argument 1 of ‘timer_get_repeat’ from incompatible pointer type [-Wincompatible-pointer-types]
48 | timer_t *test_timer = timer_init(timer_get_repeat(overall_timer));
| ^~~~~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:34:31: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
34 | int timer_get_repeat(timer_t *t);
| ~~~~~~~~~^
test_timer.c:48:27: warning: initialization of ‘void **’ from incompatible pointer type ‘timer_t *’ {aka ‘struct timer_s *’} [-Wincompatible-pointer-types]
48 | timer_t *test_timer = timer_init(timer_get_repeat(overall_timer));
| ^~~~~~~~~~
test_timer.c:49:17: warning: passing argument 1 of ‘timer_start’ from incompatible pointer type [-Wincompatible-pointer-types]
49 | timer_start(test_timer);
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:45:27: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
45 | void timer_start(timer_t *t);
| ~~~~~~~~~^
test_timer.c:54:16: warning: passing argument 1 of ‘timer_stop’ from incompatible pointer type [-Wincompatible-pointer-types]
54 | timer_stop(test_timer);
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:48:26: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
48 | void timer_stop(timer_t *t);
| ~~~~~~~~~^
test_timer.c:55:20: warning: passing argument 1 of ‘timer_subtract’ from incompatible pointer type [-Wincompatible-pointer-types]
55 | timer_subtract(test_timer, copy_timer);
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:40:30: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
40 | void timer_subtract(timer_t *t, timer_t *sub);
| ~~~~~~~~~^
test_timer.c:55:32: warning: passing argument 2 of ‘timer_subtract’ from incompatible pointer type [-Wincompatible-pointer-types]
55 | timer_subtract(test_timer, copy_timer);
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:40:42: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
40 | void timer_subtract(timer_t *t, timer_t *sub);
| ~~~~~~~~~^~~
test_timer.c:56:15: warning: passing argument 1 of ‘timer_add’ from incompatible pointer type [-Wincompatible-pointer-types]
56 | timer_add(overall_timer, test_timer);
| ^~~~~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:42:25: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
42 | void timer_add(timer_t *t, timer_t *add);
| ~~~~~~~~~^
test_timer.c:56:30: warning: passing argument 2 of ‘timer_add’ from incompatible pointer type [-Wincompatible-pointer-types]
56 | timer_add(overall_timer, test_timer);
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:42:37: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
42 | void timer_add(timer_t *t, timer_t *add);
| ~~~~~~~~~^~~
test_timer.c:59:47: warning: passing argument 1 of ‘timer_ns’ from incompatible pointer type [-Wincompatible-pointer-types]
59 | printf( "time_spent: %0.4fns\n", timer_ns(test_timer) );
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:54:26: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
54 | double timer_ns(timer_t *t);
| ~~~~~~~~~^
test_timer.c:61:19: warning: passing argument 1 of ‘timer_destroy’ from incompatible pointer type [-Wincompatible-pointer-types]
61 | timer_destroy(test_timer);
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:31:29: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
31 | void timer_destroy(timer_t *t);
| ~~~~~~~~~^
test_timer.c:62:19: warning: passing argument 1 of ‘timer_destroy’ from incompatible pointer type [-Wincompatible-pointer-types]
62 | timer_destroy(copy_timer);
| ^~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:31:29: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
31 | void timer_destroy(timer_t *t);
| ~~~~~~~~~^
test_timer.c:65:53: warning: passing argument 1 of ‘timer_ns’ from incompatible pointer type [-Wincompatible-pointer-types]
65 | printf( "overall time_spent: %0.4fns\n", timer_ns(overall_timer) );
| ^~~~~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:54:26: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
54 | double timer_ns(timer_t *t);
| ~~~~~~~~~^
test_timer.c:66:17: warning: passing argument 1 of ‘timer_destroy’ from incompatible pointer type [-Wincompatible-pointer-types]
66 | timer_destroy(overall_timer);
| ^~~~~~~~~~~~~
| |
| void **
In file included from test_timer.c:17:
timer.h:31:29: note: expected ‘timer_t *’ {aka ‘struct timer_s *’} but argument is of type ‘void **’
31 | void timer_destroy(timer_t *t);
| ~~~~~~~~~^
make: *** [Makefile:4: test_timer] Error 1
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.