From 0dc4ee873ed953a731a775dd4a18dfc710a980e7 Mon Sep 17 00:00:00 2001 From: fiplox Date: Sun, 2 Jan 2022 16:48:29 +0100 Subject: [PATCH] matcom, dot with main --- Makefile | 4 +-- src/cparse.c | 83 +++++++++++++++++++++++++++++------------------ src/cparse.h | 14 ++++++-- src/cparse.o | Bin 4984 -> 0 bytes src/main.c | 39 ++++++++++++++-------- src/matcom.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/matcom.h | 33 +++++++++---------- src/vec.c | 58 +++++++++++++++++++++++++++------ src/vec.h | 11 +++++-- src/vec.o | Bin 4512 -> 0 bytes test.c | 30 +++++++++++++---- 11 files changed, 277 insertions(+), 84 deletions(-) delete mode 100644 src/cparse.o create mode 100644 src/matcom.c delete mode 100644 src/vec.o diff --git a/Makefile b/Makefile index e1e7a34..270808b 100644 --- a/Makefile +++ b/Makefile @@ -51,9 +51,9 @@ distdir: $(DISTFILES) $(CP) $(DISTFILES) $(distdir) clean: - $(RM) $(OBJS) out.pdf + $(RM) $(OBJS) fclean: clean - $(RM) $(NAME) + $(RM) $(NAME) out.pdf graph.dot .PHONY: all clean fclean re dist distdir debug diff --git a/src/cparse.c b/src/cparse.c index 267bc08..ad196a8 100644 --- a/src/cparse.c +++ b/src/cparse.c @@ -7,19 +7,23 @@ #include #include "cparse.h" -graph_vec find_funcs(const char *path, graph_vec *g) +void find_funcs(const char *path, graph_vec *gv, graph_mco *gmc) { FILE *fp; regex_t fdre, fcre; - int ret; + int ret, index, cur_node; char line[1024]; - char boum[1024]; + char *token; regmatch_t rm[2]; - // TODO: rework regex to ignore static char *(spo_name_tab[SPO_COUNT]) = - // { "ms=", "me=", "hs=", "he=", "rs=", "re=", "lc=" }; - const char *re_func_decl = "^(\\w+(\\s+)?\\ ?\\**\\ ?){2,}\\([^!@#$+%^]+?\\)\\s+"; + bool in; + (void)gmc; + + const char *re_func_decl = "^(\\**\\w+\\s+?\\ ?\\ ?){1,}\\([^!@#$+%^]+?\\)\\s+"; const char *re_func_call = "([a-zA-Z_0-9]+)\\(.*\\)"; + token = malloc(1024 * sizeof(char)); + char *ptrtok = token; + fp = fopen(path, "r"); if (fp == 0) { fprintf(stderr, "Failed to open file '%s' (%d: %s)\n", path, errno, strerror(errno)); @@ -37,9 +41,7 @@ graph_vec find_funcs(const char *path, graph_vec *g) fclose(fp); exit(2); } - bool in = false; - int index; - int cur_node; + in = false; while ((fgets(line, 1024, fp)) != NULL) { if (in && line[0] == '}') { in = false; @@ -47,41 +49,60 @@ graph_vec find_funcs(const char *path, graph_vec *g) if (in) { if (regexec(&fcre, line, 2, rm, 0) == 0) { // printf("Line: <<%.*s>>\n", (int)(rm[0].rm_eo - rm[0].rm_so), line + rm[0].rm_so); - sprintf(boum, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so); + sprintf(token, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so); + if (strcmp(token, "defined") == 0) + continue; // printf("%.*s\n", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so); - if ((index = vis_in(*g, boum)) > -1) { - if (g->node[cur_node]->nbs == g->node[cur_node]->cap) - g->node[cur_node]->succ = - reallocarray(g->node[cur_node]->succ, (g->node[cur_node]->cap += 5), sizeof(nodept)); - g->node[cur_node]->succ[g->node[cur_node]->nbs] = g->node[index]; - g->node[cur_node]->nbs++; + if ((index = vis_in(*gv, token)) > -1) { + if (gv->node[cur_node]->nbs == gv->node[cur_node]->cap) + gv->node[cur_node]->succ = + reallocarray(gv->node[cur_node]->succ, (gv->node[cur_node]->cap += 5), sizeof(nodept)); + gv->node[cur_node]->succ[gv->node[cur_node]->nbs] = gv->node[index]; + gv->node[cur_node]->nbs++; + + mcinsert_edge(gmc, cur_node, index); } else { - vinsert_node(g, boum); - if (g->node[cur_node]->nbs == g->node[cur_node]->cap) - g->node[cur_node]->succ = - reallocarray(g->node[cur_node]->succ, (g->node[cur_node]->cap += 5), sizeof(nodept)); - g->node[cur_node]->succ[g->node[cur_node]->nbs] = g->node[g->n]; - g->node[cur_node]->nbs++; + vinsert_node(gv, token); + if (gv->node[cur_node]->nbs == gv->node[cur_node]->cap) + gv->node[cur_node]->succ = + reallocarray(gv->node[cur_node]->succ, (gv->node[cur_node]->cap += 5), sizeof(nodept)); + gv->node[cur_node]->succ[gv->node[cur_node]->nbs] = gv->node[gv->n]; + gv->node[cur_node]->nbs++; + + mcinsert_func(gmc, token); + mcinsert_edge(gmc, cur_node, -1); } } } else if (regexec(&fdre, line, 2, rm, 0) == 0) { // function definition - sprintf(boum, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so); - if ((index = vis_in(*g, boum)) > -1) { + // printf("Line: <<%.*s>>\n", (int)(rm[0].rm_eo - rm[0].rm_so), line + rm[0].rm_so); + sprintf(token, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so); + // printf("%.*s\n", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so); + if (strcmp(token, "defined") == 0) + continue; + while (*token == '*') + token++; + if ((index = vis_in(*gv, token)) > -1) { cur_node = index; } else { - vinsert_node(g, boum); - cur_node = g->n; + // printf("%s\n", token); + vinsert_node(gv, token); + mcinsert_func(gmc, token); + cur_node = gv->n; } in = true; } } + + token = ptrtok; + if (token) { + free(token); + } regfree(&fdre); regfree(&fcre); fclose(fp); - return *g; } -void findAndParse(const char *path, graph_vec *g) +void findAndParse(const char *path, graph_vec *gv, graph_mco *gmc) { char p[1024]; struct dirent *dp; @@ -95,14 +116,14 @@ void findAndParse(const char *path, graph_vec *g) if (strncmp(dp->d_name, ".", 1) == 0) continue; snprintf(p, sizeof(p), "%s/%s", path, dp->d_name); - findAndParse(p, g); + findAndParse(p, gv, gmc); } else { char *f = strrchr(dp->d_name, '.'); if (f) { if (strncmp(f, ".c", 2) == 0) { - char pa[255]; + char pa[512]; sprintf(pa, "%s/%s", path, dp->d_name); - find_funcs(pa, g); + find_funcs(pa, gv, gmc); } } } diff --git a/src/cparse.h b/src/cparse.h index 213d51d..9150f63 100644 --- a/src/cparse.h +++ b/src/cparse.h @@ -1,4 +1,12 @@ -#include "vec.h" +#ifndef CPARSE_H -void findAndParse(const char *path, graph_vec *g); -graph_vec find_funcs(const char *path, graph_vec *g); +#define CPARSE_H + +#include "vec.h" +#include "matcom.h" + +void findAndParse(const char *path, graph_vec *gv, graph_mco *gmc); +void find_funcs(const char *path, graph_vec *gv, graph_mco *gmc); + + +#endif /* end of include guard: CPARSE_H */ diff --git a/src/cparse.o b/src/cparse.o deleted file mode 100644 index 2e900fa630fb46f01b171eef3b8e17908960711a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4984 zcmb`Je{7pa8OP6!ySQzzvveDQuC2G()JYaMX;&7gMDn&tcVVw!Kj?;5x2}2pI*I1k z(fhvc($cb&CY4Ta%?eBc{+ag2kfv#fg2WV6hz3fBKp-X%NDPSrLR(80eM2sC?ajHt{kbZp|iMguLqqyxJD#C%=#0n$;H)=Kz}GO*K8$(e#fe+DHAt zQU9rkDgG#p8Q%$s;Y1q*MeM89YA~WH-l(_ut=MvPJK#cW>oA7ncp~1^q1aqIsQxRb zxSxS#@ON|HU3SW}j-yM{Q-*kz`wvDw?uT#q4~2K1jle2a?&H?qxj)|yWq#__wc;Go z^AVV_^t;~Swi{f09wn;puvp@L+uPiqk^QV+aMAV}_xGah>!*goAz01DBV1h8)Bit> z3ud{s^FI$=-$f9I&Z|FuuU3=$wLTRLc)cVptI3%dtq}Jgj=(u+tDl42XXH7E&3zU3 z#K|AxSvg>2jDyA@BYW^7_tyevrr#%R_?_BV{oI)1pQd;mp+S(1N+bZqM^8ep-lE6;ZX1{xJhtIszBEPKj>{cGrm z2V4B8!OjCS;Rxc@vbec10G>Y;G`thOj9sha8)v3F!j)Y!Cs^9MEKjE?uJNjzlqqhE ziYxlCh-;=;lEW;%qV_+W=QNnnV|&lZ^9tUm;K+u#h05ts@u$Y=gWz&;b=mBj+U(T~ zoEhz7<5Jr_o4`p|I$$9&C}bg}{X?nDQ$4AS+tW3ei4SJFyWzj5 ziJs)4gFSF!JybJ)JzMA6R2y>h%fWtZXwsKvJ> z-EHwyGXK$d((PJLBvyHH3I&cmW=~7mdX`LgyDaH$Pr58^F=iEWrLp)C+i@q#rFj3& zbYHrU-3GD36gu_@3r)9&Hnp`z&cZ60!0wbSjQtX>S!P7r_e4AQMB{s+sXfs?BRcRv z^l!JGYCUsHb?q0z&$OIg({gW1bij!ANdd?}+-^i82FU96ipt)HaqBj-x3GSNz1u_0 z?JcZVhMHs_0^4EscCAShYhk$2SEeH9L(pTd!dfu^b>uqrszOESb^Q*-A6ERds>7y` z$x?ho)$dXH6N-i~uDuCm@X%^?{0RDIY?*Wbp_dUA$FSze8^&y0WC!h^}n(svj3H8{f`6CD+ zA$uSEG%p~8gnB#^npY4)TCM+59ZMdCvey4JfN#VN1PSfL;HUK?isQI=hBP;c9^EYjiEyfak8r%} zwVhVAFVQ~bF~aeKtMv~m-VF@zJk1{^`u7u_A-t1tOL26omGBDDe}M3(3I8DBrxjoA z&skzWLiArD9Otb4e?Gv@OGHoYe2Z|ppXU`v+tmLB!f8BzLO7k*&k5f|{9K2IAz`)| ze%k-dgyT0v^WgwqR2<{Kj_8jP{Z_(f3CH(0;oen8ZH1LCyv!k0)xBJ=;ahNJ!aEij zep_f7Qk6T@zSC{EhiSrZo7%DzGp63Q*Ht4{aWCQ>gbD9bOrL|nar_;!*7$o&jr(i^ z$&&V8=Xgh9xo?&3&#J$E*Xm~7Pv_rM{dN0tzB(YPLHE--e4qoHqGwOGss8g?sB%4j zjo*brv-n-dz(UgV!ua8LM)%k8y8x`ktd${~f!}gUsrA?Xs^yTeS{6a!eh}Q`JMeks PKUbRz?chDNdi;L_Yr{?8 diff --git a/src/main.c b/src/main.c index 9e08506..9c901b6 100644 --- a/src/main.c +++ b/src/main.c @@ -15,24 +15,37 @@ // along with this program. If not, see . #include "cparse.h" +#include "matcom.h" +#include "vec.h" +#include +#include int main(int argc, char *argv[]) { (void)argc; (void)argv; - graph_vec g = vnew_graph(); - // find_funcs("/home/user/dev/l2/algo2/pattern-search/src/rgxp.c", &g); - findAndParse("/tmp/neovim/src/nvim", &g); - // for (int j = 0; j <= g.n; j++) { - // printf("NODE %d: '%s'\n", j, g.node[j]->func); + // fix_str m = "main"; + graph_vec gv = vnew_graph(); + graph_mco gmc = mcgragh(); + // find_funcs("/home/user/files/dot_files/st/x.c", &gv, &gmc); + // find_funcs("test.c", &gv, &gmc); + findAndParse("/home/user/files/dot_files/dwm/", &gv, &gmc); + // int n = mcis_in(gmc, m); + // printf("%d\n", n); + // mcprint_edges(gmc, n); + // for (int i = 0; i <= gmc.nbs; i++) { + // printf("Node %d: %s\n", i, gmc.func[i]); + // for (int j = 0; j <= gmc.nba; j++) { + // if (strcmp(gmc.func[i], gmc.func[gmc.vec[j].i]) == 0) { + // printf(" Succ %d: %s\n", gmc.vec[j].j, gmc.func[gmc.vec[j].j]); + // } + // } // } - // int i = is_in(g, "nvim_buf_get_offset"); - // if (i > -1) { - // puts("yes"); - // print_node(g.node[i]); - // } - // } else - vdot_graph(g); - vdelete_graph(&g); + // printf("TEST: %s %d\n", gmc.func[2], gmc.vec[2].j); + // + // vprint_nodes(gv.node[n]); + mcdelete_graph(&gmc); + vdot_graph(gv, true); + vdelete_graph(&gv); return 0; } diff --git a/src/matcom.c b/src/matcom.c new file mode 100644 index 0000000..853f6a9 --- /dev/null +++ b/src/matcom.c @@ -0,0 +1,89 @@ +#include "matcom.h" +#include +#include +#include +#include + +graph_mco mcgragh(void) +{ + graph_mco g; + g.nbs = -1; + g.nba = -1; + g.func = malloc((g.fcap = 10) * sizeof(fix_str)); + assert(g.func); + g.vec = malloc((g.vcap = 10) * sizeof(struct edge)); + assert(g.vec); + return g; +} + +void mcinsert_func(graph_mco *g, fix_str i) +{ + ++g->nbs; + if (g->nbs == g->fcap) { + g->func = reallocarray(g->func, (g->fcap += 128), sizeof(fix_str)); + assert(g->func); + } + strcpy(g->func[g->nbs], i); +} + +void mcinsert_edge(graph_mco *g, int dep, int arr) +{ + struct edge e; + ++g->nba; + if (g->nba == g->vcap) { + g->vec = reallocarray(g->vec, (g->vcap += 128), sizeof(struct edge)); + assert(g->vec); + } + e.i = dep; + if (arr == -1) + e.j = g->nbs; + else + e.j = arr; + g->vec[g->nba] = e; +} + +void mcdelete_graph(graph_mco *g) +{ + if (g->func) + free(g->func); + if (g->vec) + free(g->vec); + + g->func = NULL; + g->vec = NULL; +} + +int mcis_in(graph_mco g, fix_str func) +{ + int i; + if (g.nba == 0) + return -1; + for (i = 0; i <= g.nba; i++) { + if (strcmp(g.func[i], func) == 0) { + return i; + } + } + return -1; +} + +static void mcprint_succ(graph_mco g, int succ) +{ + printf(" Succ: %s\n", g.func[succ]); +} + +void mcprint_edges(graph_mco g, int n) +{ + int i; + printf("NODE %d: %s\n", n, g.func[n]); + for (i = 0; i <= g.nba; ++i) { + if (g.vec[i].i == n) { + mcprint_succ(g, g.vec[i].j); + } + } + for (i = 0; i <= g.nba; ++i) { + if (g.vec[i].i == n) { + if (g.vec[g.vec[i].j].i != -1) + mcprint_edges(g, g.vec[g.vec[i].j].i); + } + } +} diff --git a/src/matcom.h b/src/matcom.h index 207c63a..9672023 100644 --- a/src/matcom.h +++ b/src/matcom.h @@ -1,3 +1,7 @@ +#ifndef MATCOM_H + +#define MATCOM_H + typedef char fix_str[256]; typedef struct graph_mco graph_mco; @@ -7,24 +11,19 @@ struct edge { }; struct graph_mco { - int nbs; // nombre de sommets - int nba; // nombre d'aretes - fix_str *func; // noms de fonction + int nbs; // nombre de sommets + int nba; // nombre d'aretes + int vcap; // capacité de vec + int fcap; // capacité de vec + fix_str *func; // noms de fonction struct edge *vec; // vecteur d'aretes }; -graph_mco mcgragh(void) -{ - graph_mco g; - g.nbs = 0; - g.nba = -1; - g.func = malloc(10 * sizeof(fix_str)); - assert(g.func); - g.vec = malloc(10 * sizeof(struct edge)); - assert(g.vec); -} +graph_mco mcgragh(void); +void mcinsert_func(graph_mco *g, fix_str i); +void mcinsert_edge(graph_mco *g, int dep, int arr); +void mcdelete_graph(graph_mco *g); +int mcis_in(graph_mco g, fix_str func); +void mcprint_edges(graph_mco g, int n); -void mcinsert_edge(graph_mco *g, fix_str i, int dep, int arr) -{ - -} +#endif /* end of include guard: MATCOM_H */ diff --git a/src/vec.c b/src/vec.c index 0ed9dac..83235f0 100644 --- a/src/vec.c +++ b/src/vec.c @@ -4,11 +4,11 @@ #include #include - graph_vec vnew_graph(void) { graph_vec g; g.n = -1; + g.n = -1; g.cap = 10; g.node = malloc(10 * sizeof(nodept)); assert(g.node); @@ -24,6 +24,7 @@ void vinsert_node(graph_vec *g, fix_str str) assert(n); n->num = g->n; n->nbs = 0; + n->vu = 0; n->cap = 5; n->succ = malloc(5 * sizeof(nodept)); strcpy(n->func, str); @@ -60,16 +61,27 @@ int vis_in(graph_vec g, fix_str func) return -1; } -void vprint_node(nodept node) +static void vprint_succ(nodept node) +{ + // int i; + printf(" Succ: %s\n", node->func); + // for (i = 0; i < node->nbs; ++i) { + // printf("SUCC %d: %s\n", i, node->succ[i]->func); + // } +} + +void vprint_nodes(nodept node) { int i; + if (node->vu == 1) + return; + node->vu = 1; printf("NODE: %s\n", node->func); for (i = 0; i < node->nbs; ++i) { - printf("SUCC %d: %s\n", i, node->succ[i]->func); + vprint_succ(node->succ[i]); } for (i = 0; i < node->nbs; ++i) { - if (node->succ[i]->num != node->num && node->succ[i]->nbs != 0) - vprint_node(node->succ[i]); + vprint_nodes(node->succ[i]); } } @@ -78,13 +90,28 @@ void vwrite_node_dot(FILE *fp, graph_vec g) int i, j; for (i = 0; i <= g.n; i++) { for (j = 0; j < g.node[i]->nbs; j++) { - // printf("\t%s -> %s;\n", node->func, node->succ[i]->func); - fprintf(fp, "\t%s -> %s;\n", g.node[i]->func, g.node[i]->succ[j]->func); + // printf("\t%s -> %s;\n", node->func, node->succ[i]->func); + fprintf(fp, "\t%s -> %s;\n", g.node[i]->func, g.node[i]->succ[j]->func); } } } -void vdot_graph(graph_vec g) +void main_graph(FILE *fp, nodept node) +{ + int i; + if (node->vu == 1) + return; + node->vu = 1; + printf("NODE: %s\n", node->func); + for (i = 0; i < node->nbs; ++i) { + fprintf(fp, "\t%s -> %s;\n", node->func, node->succ[i]->func); + } + for (i = 0; i < node->nbs; ++i) { + main_graph(fp, node->succ[i]); + } +} + +void vdot_graph(graph_vec g, bool main) { FILE *fp; @@ -92,8 +119,19 @@ void vdot_graph(graph_vec g) fprintf(fp, "digraph main {\n"); - vwrite_node_dot(fp, g); - // write_node_dot(fp, node->succ[2]->succ[1]->succ[0]); + if (main) { + fix_str m = "main"; + int n = vis_in(g, m); + if (n != -1) { + main_graph(fp, g.node[n]); + } else { + fprintf(stderr, "main not found.\n"); + exit(1); + } + + } else { + vwrite_node_dot(fp, g); + } fprintf(fp, "}"); diff --git a/src/vec.h b/src/vec.h index 06ef3b5..6585f24 100644 --- a/src/vec.h +++ b/src/vec.h @@ -1,3 +1,7 @@ +#ifndef VEC_H + +#define VEC_H + #include typedef char fix_str[256]; @@ -11,6 +15,7 @@ struct nodes { }; struct node { + int vu; int num; // le numero de noeud int nbs; // nombre de successeurs fix_str func; // noms de fonctions @@ -22,5 +27,7 @@ graph_vec vnew_graph(void); void vinsert_node(graph_vec *g, fix_str str); void vdelete_graph(graph_vec *g); int vis_in(graph_vec g, fix_str func); -void vprint_node(nodept node); -void vdot_graph(graph_vec g); +void vdot_graph(graph_vec g, bool main); +void vprint_nodes(nodept node); + +#endif /* end of include guard: VEC_H */ diff --git a/src/vec.o b/src/vec.o deleted file mode 100644 index 95b7c735822932596223d41bae92474d6281b879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4512 zcmcInYitxn9G`0sx;(s=mlgrLQ7eVOddK@E-j+i5@GKQt4Dz@v+da5=y{mW2wIGz@ zQE{^rnyBB5;fs+EeDs5?f1)0GHxbb~Pgw2}W7wAyeT(@})n;!H{VNHF=z8A6wG-H0(3Xff~xYoOEO32wQX?xD@ z0kUehdV3^p6|!rk6XlTQVAwj%?tR&qT4T$7K`+oqUxx(a!$3Px#mzK3TLz$JU(>RE zQrNyn%|lMDw9=k@UCVwhtyedwo7BhKfK;l$JdMY4mUVvA#ollT$!#`i7jTpO-jw~_LBBQ*j?Jd z}i$4epI9$aC~K1Ii{qU6K1OvnX@ zcK;vsoY(~kgl%_&K=lvTNB7zmC6R10NjhabpD_)^AX`#;%hm|!awcK6MrgMxlZ-V@ zBME}7oQWmUX3C17VO5SkeTHmo)l>5HX{2sd&GJQZWqKr8)3|JzT-oGyMpUNdnM(m* zJkkxLG$k$4N}6KSi`=Zo67rjH-WYK`u|>|9sdOxvkOQ+7zv72VsElW=XUA&dX)E(g z8eJlF!$jjpJ(-Oy#a8u|ZS+a-CS(D0@j>|nU)8>{YF~M^PgZ?Zs?VPtw%>c8_+U{{ zCw65z1OzbllV^c$p$&+GFR)d8rSm+`Jr27NZaXM+5P)qvKuVigBuae$}@?^#!vf z`-gY2ctyJq@T>EVz^~WgGZG zocHnP2qgs%;$vu!kV&kKGyV+L=aGJ5e1+jtS!*zUBkObjuQ5EraQcG>`YQ~NGki2_ zHHNpbKKJt?!{1^!&u1RP_c9!|DV2BNJyw_>x|ac)2z<_QneMv*nnL)WfTN$FOLO-< z=(yhs@xgsT{6oNLK1cwe-vG4N;3?#%7I5U_H;F>O1!#lt6ylcv5Bb*_pYDI)el`SO z1|0bvY$EA509elud>lub&(Z~b;}w;tLh>VC3g!W8HnRv$UrsYCWNOK zC!)mTndXSz)C3o%EhO5KiY2TliP8*7)QBh3CQIGi8i}U#W|KryCSZjl3imsbq0VTT z;CP#5kY+j`#Jw$Isg}N(DCzCZw57!>3)n0u^SLsQD|5LrhbyzWGK(t#$Tr!eTROTA zC;@ln{@WYR6}BZGa#YWL*t^(1;DdQx@+1r(hG(8ALDspS=N!*uQSdCoZ!=%I@lXLN zXZHBb;nu{n2?fs(ly(S?@n_Lq?lqq|eJ=-5jpxr>KcJ{%E6O=$|F{T(&h2=+S-?c< z_l1foz&-C`E$p)!ba9i}^Y51r@cMcGYfuV>I?OI$hZzy)4}WL4J)gfLfE9-alF)R( iGbnuhIe_*kyl%Hghyp-x`(6y diff --git a/test.c b/test.c index 1de66fc..14587c3 100644 --- a/test.c +++ b/test.c @@ -1,5 +1,14 @@ #include +int aurevoir(void); +void bar(void); +void bonjour(void); +void bye(void); +void hello(void); +void bar(void); +int foo(void); +int toto(int a, int b); + int aurevoir(void) { return 42; @@ -13,7 +22,7 @@ void bonjour(void) void bye(void) { - puts("Byte..."); + puts("Bye..."); } void hello(void) @@ -23,24 +32,33 @@ void hello(void) bonjour(); } -void foo(void) +void bar(void) +{ + toto(1, 1); +} + +int foo(void) { hello(); + bar(); + return 1; } -int add(int a, int b) +int toto(int a, int b) { - aurevoir(); + if (a != 1) + foo(); + else + aurevoir(); return a + b; } - int main(void) { int res; foo(); - res = add(21, 21); + res = toto(21, 21); printf("%i\n", res); return 0;