{"action":"created","issue":{"url":"https://api.github.com/repos/itheof/42sh-posix/issues/81","repository_url":"https://api.github.com/repos/itheof/42sh-posix","labels_url":"https://api.github.com/repos/itheof/42sh-posix/issues/81/labels{/name}","comments_url":"https://api.github.com/repos/itheof/42sh-posix/issues/81/comments","events_url":"https://api.github.com/repos/itheof/42sh-posix/issues/81/events","html_url":"https://github.com/itheof/42sh-posix/issues/81","id":196250568,"number":81,"title":"Macro de Debug","user":{"login":"tmielcza","id":13508589,"avatar_url":"https://avatars.githubusercontent.com/u/13508589?v=3","gravatar_id":"","url":"https://api.github.com/users/tmielcza","html_url":"https://github.com/tmielcza","followers_url":"https://api.github.com/users/tmielcza/followers","following_url":"https://api.github.com/users/tmielcza/following{/other_user}","gists_url":"https://api.github.com/users/tmielcza/gists{/gist_id}","starred_url":"https://api.github.com/users/tmielcza/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmielcza/subscriptions","organizations_url":"https://api.github.com/users/tmielcza/orgs","repos_url":"https://api.github.com/users/tmielcza/repos","events_url":"https://api.github.com/users/tmielcza/events{/privacy}","received_events_url":"https://api.github.com/users/tmielcza/received_events","type":"User","site_admin":false},"labels":[{"id":500024206,"url":"https://api.github.com/repos/itheof/42sh-posix/labels/misc","name":"misc","color":"fef2c0","default":false},{"id":449961478,"url":"https://api.github.com/repos/itheof/42sh-posix/labels/QUESTION","name":"QUESTION","color":"cc317c","default":false},{"id":451525563,"url":"https://api.github.com/repos/itheof/42sh-posix/labels/TODO","name":"TODO","color":"5319e7","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2016-12-18T00:21:57Z","updated_at":"2016-12-18T10:23:22Z","closed_at":null,"body":"Je ne sais pas trop ce que vous voulez pour débug, mais j'espère que ces quelques modestes macros vous satisferons:\r\n```c\r\n#ifdef NDEBUG                                                                                            \r\n# define DEBUG(X)                                                                                        \r\n# define PRINT_DEBUG(STR, ...)                                                                           \r\n# define PRINT_DEBUG_INFO(STR, ...)                                                                      \r\n#else                                                                                                    \r\n# include <stdio.h>                                                                                      \r\n# define DEBUG(X) (X)                                                                                    \r\n# define PRINT_DEBUG(STR, ARGS...) fprintf(stderr, STR \"\\n\", ##ARGS)                                            \r\n# define PRINT_DEBUG_INFO(STR, ARGS...) fprintf(stderr, \"debug@%s:%d: \" STR \"\\n\", __FILE__, __LINE__, ##ARGS)    \r\n#endif\r\n```\r\n\r\nExplications :\r\nIl y a deux blocs principaux, un où sont definie des macros vides (quand le debug est desactivé) et un où sont définies les véritables macros.\r\nLe deuxième bloc inclus `stdio.h` puisqu'il s'agit d'afficher du debug.\r\nLes macros utilisent `fprintf()` histoire d'écrire sur la sortie d'erreur.\r\nLa première exécute simplement du code, la deuxième écrit une string formatée sur la sortie d'erreur ainsi que la troisième, qui rajoute des infos sur le fichier et la ligne où le débug est appelé.\r\nElles sont variadiques pour pouvoir être utilisées comme les fonctions `printf()`: `ARGS` représente un ou plusieurs paramètres. La syntaxe `##ARGS` est utilisée pour enlever la virgule précédente si jamais la liste d'arguments est vide.\r\nJ'ai rajouté des sauts de lignes à la fin des strings de debug, ça me semble plus pratique à utiliser comme ça mais on peut les enlever tkt. Pareil pour le formattage de `PRINT_DEBUG_INFO` (qui d'ailleurs n'est peut être pas utile mais c'est toujours sympa de pouvoir mettre du débug un peu partout et savoir où c'est appelé, enfin c'est le cas quand on ne sait pas se servir de lldb).\r\n\r\nCela s'utilise comme ceci :\r\n```c\r\nDEBUG(fprintf(stderr, \"Debug\\n\"));\r\nPRINT_DEBUG(\"Debug (super utile me direz %s)\", \"vous\");\r\nPRINT_DEBUG_INFO(\"Pareil\");\r\n```\r\nEt cela affiche :\r\n```\r\nDebug\r\nDebug (super utile me direz vous)\r\ndebug@test.c:17: Pareil\r\n```"},"comment":{"url":"https://api.github.com/repos/itheof/42sh-posix/issues/comments/267813600","html_url":"https://github.com/itheof/42sh-posix/issues/81#issuecomment-267813600","issue_url":"https://api.github.com/repos/itheof/42sh-posix/issues/81","id":267813600,"user":{"login":"dkrmr","id":16935834,"avatar_url":"https://avatars.githubusercontent.com/u/16935834?v=3","gravatar_id":"","url":"https://api.github.com/users/dkrmr","html_url":"https://github.com/dkrmr","followers_url":"https://api.github.com/users/dkrmr/followers","following_url":"https://api.github.com/users/dkrmr/following{/other_user}","gists_url":"https://api.github.com/users/dkrmr/gists{/gist_id}","starred_url":"https://api.github.com/users/dkrmr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dkrmr/subscriptions","organizations_url":"https://api.github.com/users/dkrmr/orgs","repos_url":"https://api.github.com/users/dkrmr/repos","events_url":"https://api.github.com/users/dkrmr/events{/privacy}","received_events_url":"https://api.github.com/users/dkrmr/received_events","type":"User","site_admin":false},"created_at":"2016-12-18T10:23:22Z","updated_at":"2016-12-18T10:23:22Z","body":"Je n'avais pas vraiment ça en tete quand je parlais de retirer automatiquement les fonctions de debug de la compilation pour le rendu final."}}
{"actor":{"display_login":"dkrmr"}}