{"id":473129,"date":"2025-09-02T15:32:29","date_gmt":"2025-09-02T15:32:29","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=473129"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=473129","title":{"rendered":"<span>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0432 C \u0438 C++<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<ul>\n<li>\n<p>\u041e\u043d \u043d\u0435 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u044f\u0437\u044b\u043a<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u043a\u0440\u043e\u0441\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0438\u043b\u0438 \u0432\u043e\u0432\u0441\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0432\u0438\u0434\u0443 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439, \u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u0434 \u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u043a\u043e\u0434\u0430 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e.<\/p>\n<p>\u0421\u043e \u0432\u0441\u0435\u043c\u0438 \u0435\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u043c\u0438, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0435\u0441\u0442\u044c \u0432 \u044f\u0437\u044b\u043a\u0435 \u0438 \u0434\u043e\u0441\u0442\u043e\u0438\u043d \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p><a href=\"#0\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u044f<\/a><br \/> <a href=\"#1\" rel=\"noopener noreferrer nofollow\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b<\/a>:<\/p>\n<ul>\n<li>\n<p><a href=\"#2\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0440\u043e\u0441, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0442\u0443<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#3\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0440\u043e\u0441, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0432\u0441\u0435\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#4\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0440\u043e\u0441\u044b \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#5\" rel=\"noopener noreferrer nofollow\">\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#6\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#7\" rel=\"noopener noreferrer nofollow\">If-else \u043c\u0430\u043a\u0440\u043e\u0441<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a href=\"#8\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 MAP<\/a><br \/> <a href=\"#9\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043d\u0430 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435<\/a><br \/> <a href=\"#10\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<p><a class=\"anchor\" name=\"0\" id=\"0\"><\/a><\/p>\n<h3>\u276f \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u044f<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443, \u043d\u043e \u0432 \u044f\u0437\u044b\u043a\u0435 \u043d\u0435\u0442 \u0446\u0438\u043a\u043b\u043e\u0432, \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cpp\">#define A(x) x B(x) #define B(x) x A(x)  A(0) <\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f, \u043d\u043e \u043e\u043d\u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041f\u043e \u0438\u0442\u043e\u0433\u0443, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0435\u0447\u0442\u043e \u0432\u0440\u043e\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">0 0 A(0) <\/code><\/pre>\n<p>\u041f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f. \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 C23 (\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 C++ \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 C \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430):<\/p>\n<h3>6.10.4.4.1<\/h3>\n<blockquote>\n<p>After all parameters in the replacement list have been substituted and # and ## processing has<br \/> taken place, all placemarker preprocessing tokens are removed. The resulting preprocessing token<br \/> sequence is then rescanned, along with all subsequent preprocessing tokens of the source file, for<br \/> more macro names to replace.<\/p>\n<\/blockquote>\n<h3>6.10.4.4.2<\/h3>\n<blockquote>\n<p>If the name of the macro being replaced is found during this scan of the replacement list (not<br \/> including the rest of the source file\u2019s preprocessing tokens), it is not replaced. Furthermore, if any<br \/> nested replacements encounter the name of the macro being replaced, it is not replaced. These<br \/> nonreplaced macro name preprocessing tokens are no longer available for further replacement even<br \/> if they are later (re)examined in contexts in which that macro name preprocessing token would<br \/> otherwise have been replaced.<\/p>\n<\/blockquote>\n<p>\u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 (\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435). \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 (\u0438\u043b\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432) \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430, \u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u043e. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043d\u043e\u0432\u0430 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 A \u0438 B \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u044f\u0432\u043b\u0435\u043d\u0438\u044f. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u043d\u0435 \u0431\u044b\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d, \u0438 \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e. \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438, \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 OUT, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430.<\/p>\n<pre><code class=\"cpp\">#define OUT #define A(x) x B OUT (x) #define B(x) x A OUT (x) <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 A, \u0442\u043e \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0448\u0430\u0433. \u0414\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 EVAL \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"cpp\">#define EVAL(...) __VA_ARGS__ <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">#define OUT #define A(x) x B OUT (x) #define B(x) x A OUT (x)  #define EVAL(...) __VA_ARGS__  A(0) EVAL(A(0)) EVAL(EVAL(A(0))) EVAL(EVAL(EVAL(A(0)))) <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>0 B (0) 0 0 A (0) 0 0 0 B (0) 0 0 0 0 A (0) <\/code><\/pre>\n<p>\u0412\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0437\u0430\u0445\u043b\u0430\u043c\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c EVAL, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 EVAL_0, \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 EVAL_1 \u0432\u043d\u0443\u0442\u0440\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">#define EVAL_2(...) __VA_ARGS__ #define EVAL_1(...) EVAL_2(EVAL_2(EVAL_2(EVAL_2(__VA_ARGS__)))) #define EVAL_0(...) EVAL_1(EVAL_1(EVAL_1(EVAL_1(__VA_ARGS__)))) #define EVAL(...) EVAL_0(EVAL_0(EVAL_0(EVAL_0(__VA_ARGS__)))) <\/code><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0441\u0442\u0435\u043a\u0430 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438.<\/p>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439, \u044f\u0437\u044b\u043a \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u043e \u0422\u044c\u044e\u0440\u0438\u043d\u0433\u0443. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0441\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438, \u043b\u044e\u0431\u0430\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0438 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h3>\u276f \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b<\/h3>\n<p><a class=\"anchor\" name=\"2\" id=\"2\"><\/a><\/p>\n<h4>\u041c\u0430\u043a\u0440\u043e\u0441, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0442\u0443<\/h4>\n<pre><code class=\"cpp\">#define VOID(...) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"3\" id=\"3\"><\/a><\/p>\n<h4>\u041c\u0430\u043a\u0440\u043e\u0441, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0432\u0441\u0435\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/h4>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, &#171;(123) other&#187;, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f &#171;(123)&#187;. \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 123. \u042d\u0442\u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c VOID \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043b\u0438\u0448\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b.<\/p>\n<pre><code class=\"cpp\">#define GET_FIRST_LIST_0(...) (__VA_ARGS__) VOID ( #define GET_FIRST_LIST(...) GET_FIRST_LIST_0 __VA_ARGS__ ) \/*  GET_FIRST_LIST((1, 2, 3), some, other)  =&gt; GET_FIRST_LIST_0 (1, 2, 3), some, other )  =&gt; (1, 2, 3) VOID( some, other )  =&gt; (1, 2, 3) *\/ <\/code><\/pre>\n<p><a class=\"anchor\" name=\"4\" id=\"4\"><\/a><\/p>\n<h4>\u041c\u0430\u043a\u0440\u043e\u0441\u044b \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439<\/h4>\n<p>\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u0430 \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a &#8216;,&#8217;, &#8216;(&#8216;, &#8216;)&#8217;. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439.<\/p>\n<pre><code class=\"cpp\">#define DELAY_COMMA_0() , #define DELAY_COMMA_1() DELAY_COMMA_0 OUT() #define DELAY_COMMA_2() DELAY_COMMA_1 OUT() #define DELAY_COMMA_3() DELAY_COMMA_2 OUT()  #define DELAY_OPEN_BRACE_0() ( #define DELAY_OPEN_BRACE_1() DELAY_OPEN_BRACE_0 OUT() #define DELAY_OPEN_BRACE_2() DELAY_OPEN_BRACE_1 OUT() #define DELAY_OPEN_BRACE_3() DELAY_OPEN_BRACE_2 OUT()  #define DELAY_CLOSE_BRACE_0() ) #define DELAY_CLOSE_BRACE_1() DELAY_CLOSE_BRACE_0 OUT() #define DELAY_CLOSE_BRACE_2() DELAY_CLOSE_BRACE_1 OUT() #define DELAY_CLOSE_BRACE_3() DELAY_CLOSE_BRACE_2 OUT() <\/code><\/pre>\n<p>\u0426\u0438\u0444\u0440\u0430 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"5\" id=\"5\"><\/a><\/p>\n<h4>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441<\/h4>\n<pre><code class=\"cpp\">#define EVAL2(...) __VA_ARGS__ <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u0443 EVAL_2, \u043e\u0434\u043d\u0430\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 EVAL \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 EVAL. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0443\u043d\u043a\u0442\u0443 6.10.4.4.2 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 C23, \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0442 \u044d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432 \u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0435\u0433\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 EVAL \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441.<\/p>\n<p><a class=\"anchor\" name=\"6\" id=\"6\"><\/a><\/p>\n<h4>\u041c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/h4>\n<p>\u0412 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ## \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u0445, \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 CONCAT, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0435\u0439:<\/p>\n<pre><code class=\"cpp\">#define CONCAT_1(a, b) a##b #define CONCAT_0(...) CONCAT_1 OUT(__VA_ARGS__) #define CONCAT(...) EVAL2(CONCAT_0(__VA_ARGS__)) <\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043c\u0430\u043a\u0440\u043e\u0441 CONCAT_0 \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0435\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 CONCAT_1, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u043c\u0430\u043a\u0440\u043e\u0441 CONCAT \u0432\u0435\u0440\u043d\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"7\" id=\"7\"><\/a><\/p>\n<h4>If-else \u043c\u0430\u043a\u0440\u043e\u0441<\/h4>\n<p>\u0427\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0440\u0430\u0432\u043d\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 IF_ELSE.<\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d \u043f\u043e\u0437\u0436\u0435, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u042d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u043e \u0441\u0443\u0442\u0438, \u0440\u0430\u0431\u043e\u0442\u0430 IF_ELSE \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u0432 \u043d\u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 IF_ELSE_1 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f, \u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0447\u0430\u0441\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 IF_ELSE. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c, \u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 IF_ELSE:<\/p>\n<pre><code class=\"cpp\">#define IF_ELSE_1(test, next, ...) next OUT #define IF_ELSE_0(test, next, ...) IF_ELSE_1(test, next, __VA_ARGS__, 0)  #define IF_ELSE(condition, t, f) IF_ELSE_0(condition OUT t, f)  #define CHECK_IF_ELSE 0,  \/* IF_ELSE(CHECK_IF_ELSE, true, false)  =&gt; IF_ELSE_0(0, OUT true, false)  =&gt; IF_ELSE_1(0, true, false, 0)  =&gt; true OUT  IF_ELSE(FALSE, true, false)  =&gt; IF_ELSE_0(FALSE OUT true, false)  =&gt; IF_ELSE_1(FALSE true, false, 0)  =&gt; false OUT *\/ <\/code><\/pre>\n<p><a class=\"anchor\" name=\"8\" id=\"8\"><\/a><\/p>\n<h3>\u276f \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 MAP<\/h3>\n<p>\u0426\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 MAP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u043a\u043e \u0432\u0441\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0441\u043f\u0438\u0441\u043a\u0430. \u042d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 map() \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432 C++ \u044d\u0442\u043e std::views::transform).<\/p>\n<p>\u0418\u0434\u0435\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432: MAP_0 \u0438 MAP_1. \u042d\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043b\u0438\u0431\u043e MAP_1, \u043b\u0438\u0431\u043e MAP_0.<\/p>\n<pre><code class=\"cpp\">#define MAP_0(macro, x, ...) macro(x), MAP_1 OUT(macro, __VA_ARGS__) #define MAP_1(macro, x, ...) macro(x), MAP_0 OUT(macro, __VA_ARGS__)   EVAL(MAP_1(MACRO, 1, 2, 3)) \/\/ MACRO(1), MACRO(2), MACRO(3), MAP_2 (MACRO, ) <\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 MAP_0 \u0438\u043b\u0438 MAP_1, \u0430 \u043c\u0430\u043a\u0440\u043e\u0441 VOID. \u0414\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0446\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0442 \u0435\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 &#171;()()&#187;. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 &#171;()()&#187;.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 IF_ELSE. \u0412 true-\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c VOID, \u0430 \u0432 false-\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435 &#8212; \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 next, \u0433\u0434\u0435 next &#8212; \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 (MAP_0 \u0438\u043b\u0438 MAP_1).<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441 MAP_CHECK_0, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 MAP_CHECK_1. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043e\u043d \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">#define MAP_CHECK_1() 0, #define MAP_CHECK_0() MAP_CHECK_1  \/* MAP_CHECK_0()()  =&gt; MAP_CHECK_1()  =&gt; 0, *\/   #define MAP_NEXT(test, next) IF_ELSE(MAP_CHECK_0 test, VOID, DELAY_COMMA_2() next) \/*  MAP_NEXT(()(), next)  =&gt; IF_ELSE(MAP_CHECK_0 ()(), VOID, DELAY_COMMA_2() next)  =&gt; VOID  MAP_NEXT(some, next)  =&gt; IF_ELSE(MAP_CHECK_0 some, VOID, DELAY_COMMA_2() next)  =&gt; , next *\/ <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b MAP_0, MAP_1 \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 MAP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c EVAL \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">#define MAP_0(macro, x, next, ...) macro(x) MAP_NEXT(next, MAP_1)(macro, next, __VA_ARGS__) #define MAP_1(macro, x, next, ...) macro(x) MAP_NEXT(next, MAP_0)(macro, next, __VA_ARGS__)   #define MAP(macro, ...) EVAL(MAP_0(macro, __VA_ARGS__, ()(), 0))   #define MACRO(x) x \/* MAP(MACRO, 1, 2)  =&gt; MAP_0(MACRO, 1, 2, ()(), 0)  =&gt; MACRO(1) MAP_NEXT(2, MAP_1) (MACRO, 2, ()(), 0)  =&gt; 1 , MAP_1(MACRO, 2, ()(), 0)  =&gt; 1 , MACRO(2) MAP_NEXT(()(), MAP_0) (MACRO, ()(), 0)  =&gt; 1 , 2 VOID(MACRO, ()(), 0)  =&gt; 1 , 2 *\/ <\/code><\/pre>\n<p><a class=\"anchor\" name=\"9\" id=\"9\"><\/a><\/p>\n<h3>\u276f \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043d\u0430 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435<\/h3>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">PARSE((1, 2, 3)A(4, 5, 6) B A(7, 8, 9) other code,      () other code); <\/code><\/pre>\n<p>\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443:<\/p>\n<pre><code class=\"cpp\"> BLOCK(ELEMENT_A((1, 2, 3), 4, 5, 6), ELEMENT_B, ELEMENT_A((1, 2, 3), 7, 8, 9), BASIC_PART ((1, 2, 3), other code)) ,BLOCK(BASIC_PART ((), other code)) <\/code><\/pre>\n<p>\u0425\u043e\u0442\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439, \u043e\u043d\u0430 \u0443\u0436\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439, \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438. \u0420\u0430\u0437\u043e\u0431\u044c\u0435\u043c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0435 \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b CLEAR \u0438 REMOVE_FIRST:<\/p>\n<ul>\n<li>\n<p>\u043c\u0430\u043a\u0440\u043e\u0441 CLEAR \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u0440\u043e\u043c\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0435\u043d. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0445 \u043d\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043e\u043d \u0432\u0435\u0440\u043d\u0435\u0442 ERROR;<\/p>\n<\/li>\n<li>\n<p>\u043c\u0430\u043a\u0440\u043e\u0441 REMOVE_FIRST \u0431\u0443\u0434\u0435\u0442 \u0443\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">CLEAR(A(1, 2, 3) B code)  =&gt; A(1, 2, 3) CLEAR(B code)  =&gt; B CLEAR(code)  =&gt; ERROR   REMOVE_FIRST(A(1, 2, 3) B code)  =&gt; B code REMOVE_FIRST(B code)  =&gt; code <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u043e\u043d\u0446\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0430. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c BASIC_PART, \u0430 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441:<\/p>\n<pre><code class=\"cpp\">PARSE_NEXT(PARSE_BLOCK_1, A(4, 5, 6) B code)  =&gt; PARSE_BLOCK_1 PARSE_NEXT(PARSE_BLOCK_1, B code)  =&gt; PARSE_BLOCK_1 PARSE_NEXT(PARSE_BLOCK_1, code)  =&gt; BASIC_PART <\/code><\/pre>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u043b\u043e\u043a\u0430 (\u043d\u0435 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439) \u2014 PARSE_BLOCK_ELEMENT:<\/p>\n<pre><code class=\"cpp\">PARSE_BLOCK_ELEMENT((1, 2, 3), A(4, 5, 6))  =&gt; ELEMENT_A((1, 2, 3), 4, 5, 6)  PARSE_BLOCK_ELEMENT((1, 2, 3), B)  =&gt; ELEMENT_B <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u2014 PARSE_BLOCK_1 \u0438 PARSE_BLOCK_2. \u041c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043d\u0430\u0437\u043e\u0432\u0435\u043c PARSE_BLOCK. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u0430\u043a\u0440\u043e\u0441 PARSE \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c PARSE_BLOCK \u043a\u043e \u0432\u0441\u0435\u043c \u0431\u043b\u043e\u043a\u0430\u043c.<\/p>\n<h3>REMOVE_FIRST<\/h3>\n<p>\u0418\u0434\u0435\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c REMOVE_ \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f REMOVE_A(&#8230;) \u0438 REMOVE_B. \u041f\u043e\u0441\u043b\u0435 \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0442 \u043d\u0438\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 REMOVE_FIRST \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u0438\u0445 \u043d\u0430 \u043f\u0443\u0441\u0442\u043e\u0442\u0443.<\/p>\n<pre><code class=\"cpp\">#define REMOVE_A(...) #define REMOVE_B  #define REMOVE_FIRST(x) REMOVE_##x <\/code><\/pre>\n<h3>CLEAR<\/h3>\n<p>\u0415\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 IF_ELSE \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a. \u0415\u0433\u043e \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0447\u0435\u043c-\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e GET_FIRST_LIST, \u0447\u0435\u043c-\u0442\u043e &#8212; \u043d\u0430 REMOVE_FIRST<\/p>\n<p>\u041c\u0430\u043a\u0440\u043e\u0441\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0431\u0443\u0434\u0443\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043b-\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f IF_ELSE, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c A(&#8230;) \u0438\u043b\u0438 B \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c VOID(, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0451 \u043b\u0438\u0448\u043d\u0435\u0435. \u0422\u0430\u043a \u0438\u0445 \u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u043a\u043e\u0431\u043a\u0430 \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u043b\u0430 \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 IF_ELSE, \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 2<\/p>\n<pre><code class=\"cpp\">#define PARSE_CHECK_0_A(...) 0, A(__VA_ARGS__) VOID DELAY_OPEN_BRACE_2()  #define PARSE_CHECK_0_B 0, B VOID DELAY_OPEN_BRACE_2() <\/code><\/pre>\n<p>\u0412 IF_ELSE \u0434\u043b\u044f true-\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u043a\u043e\u0431\u043a\u0430 \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 2, \u0430 \u0434\u043b\u044f \u043b\u043e\u0436\u043d\u043e\u0433\u043e \u2014 ERROR:<\/p>\n<pre><code class=\"cpp\"> #define CLEAR(x) IF_ELSE(PARSE_CHECK_0_##x, DELAY_CLOSE_BRACE_2(), ERROR)  \/* CLEAR(A(1, 2, 3) B code)  =&gt; IF_ELSE(PARSE_CHECK_0_A(1, 2, 3) B code, DELAY_CLOSE_BRACE_2(), ERROR)  =&gt; A(1, 2, 3) VOID (B code)  =&gt; A(1, 2, 3)  CLEAR(B code)  =&gt; IF_ELSE(PARSE_CHECK_0_B code, DELAY_CLOSE_BRACE_2(), ERROR)  =&gt; B VOID (code)  =&gt; B  CLEAR(code)  =&gt; IF_ELSE(PARSE_CHECK_0_code, DELAY_CLOSE_BRACE_2(), ERROR)  =&gt; ERROR *\/ <\/code><\/pre>\n<h3>PARSE_NEXT<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441 IF_ELSE \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a. \u042d\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 A(&#8230;) \u0438 B, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 CONCAT. \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 IF_ELSE \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441, \u043b\u0438\u0431\u043e BASIC_PART:<\/p>\n<pre><code class=\"cpp\">#define PARSE_CHECK_1_A(...) 0, #define PARSE_CHECK_1_B 0,   #define PARSE_NEXT(macro, ...) IF_ELSE(CONCAT(PARSE_CHECK_1_, CLEAR(__VA_ARGS__)), macro, BASIC_PART) \/*  PARSE_NEXT(PARSE_BLOCK_1, A(1, 2, 3) B code)  =&gt; IF_ELSE(CONCAT(PARSE_CHECK_1_, CLEAR(A(1, 2, 3) B code)), PARSE_BLOCK_1, BASIC_PART)  =&gt; IF_ELSE(PARSE_CHECK_1_A(1, 2, 3), PARSE_BLOCK_1, BASIC_PART)  =&gt; PARSE_BLOCK_1   PARSE_NEXT(PARSE_BLOCK_1, B code)  =&gt; IF_ELSE(CONCAT(PARSE_CHECK_1_, CLEAR(B code)), PARSE_BLOCK_1, BASIC_PART)  =&gt; IF_ELSE(PARSE_CHECK_1_B, PARSE_BLOCK_1, BASIC_PART)  =&gt; PARSE_BLOCK_1   PARSE_NEXT(PARSE_BLOCK_1, code)  =&gt; IF_ELSE(CONCAT(PARSE_CHECK_1_, CLEAR(code)), PARSE_BLOCK_1, BASIC_PART)  =&gt; IF_ELSE(PARSE_CHECK_1_ERROR, PARSE_BLOCK_1, BASIC_PART)  =&gt; BASIC_PART *\/ <\/code><\/pre>\n<h3>PARSE_BLOCK_ELEMENT<\/h3>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0441\u043a\u043e\u0431\u043a\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">#define PARSE_CHECK_2_A(...) TRANSFORM_A OUT ((__VA_ARGS__),  #define PARSE_CHECK_2_B TRANSFORM_B OUT ( <\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u043c\u0430\u043a\u0440\u043e\u0441 PARSE_BLOCK_ELEMENT. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0441 \u043e\u0447\u0438\u0449\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CLEAR, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0441\u043a\u043e\u0431\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e:<\/p>\n<pre><code class=\"cpp\">#define PARSE_BLOCK_ELEMENT(list, ...) CONCAT(PARSE_CHECK_2_, CLEAR(__VA_ARGS__)) list)  \/* PARSE_BLOCK_ELEMENT((1, 2, 3), A(4, 5, 6) B code)  =&gt; CONCAT(PARSE_CHECK_2_, CLEAR(A(4, 5, 6) B code)) (1, 2, 3))  =&gt; PARSE_CHECK_2_A(4, 5, 6) (1, 2, 3))  =&gt; TRANSFORM_A((4, 5, 6), (1, 2, 3))  PARSE_BLOCK_ELEMENT((1, 2, 3), B code)  =&gt; CONCAT(PARSE_CHECK_2_, CLEAR(B code)) (1, 2, 3))  =&gt; PARSE_CHECK_2_B (1, 2, 3))  =&gt; TRANSFORM_B((1, 2, 3)) *\/ <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b TRANSFORM_A \u0438 TRANSFORM_B. \u0412 \u043c\u0430\u043a\u0440\u043e\u0441\u0435 TRANSFORM_A \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043a\u043e\u0431\u043a\u0438, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043c\u0430\u043a\u0440\u043e\u0441 EVAL2:<\/p>\n<pre><code class=\"cpp\">#define TRANSFORM_A(first, second) ELEMENT_A(second, EVAL2 first) \/* TRANSFORM_A((4, 5, 6), (1, 2, 3))  =&gt; ELEMENT_A((1, 2, 3), EVAL2 (4, 5, 6))  =&gt; ELEMENT_A((1, 2, 3), 4, 5, 6) *\/  #define TRANSFORM_B(...) ELEMENT_B \/* TRANSFORM_B((1, 2, 3))  =&gt; ELEMENT_B *\/ <\/code><\/pre>\n<h3>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h3>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043b\u0438\u0448\u044c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441 PARSE_BLOCK, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0432 BLOCK(), \u043e\u0442\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 PARSE_BLOCK_0. \u042d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442 BASIC_PART. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 PARSE_BLOCK_1, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 &#8212; \u0432 BASIC_PART:<\/p>\n<pre><code class=\"cpp\">#define PARSE_BLOCK_0(list, ...) PARSE_NEXT(PARSE_BLOCK_1, __VA_ARGS__)(list, __VA_ARGS__)  #define PARSE_BLOCK(...) BLOCK(PARSE_BLOCK_0(GET_FIRST_LIST(__VA_ARGS__), VOID __VA_ARGS__)) <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u044b PARSE_BLOCK_1 \u0438 PARSE_BLOCK_2. \u042d\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0447\u0435\u0440\u0435\u0437 PARSE_NEXT \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u043c\u0443:<\/p>\n<pre><code class=\"cpp\">#define PARSE_BLOCK_2(list, ...) \\  PARSE_BLOCK_ELEMENT(list, CLEAR(__VA_ARGS__)), PARSE_NEXT(PARSE_BLOCK_1, REMOVE_FIRST(__VA_ARGS__))(list, REMOVE_FIRST(__VA_ARGS__))  #define PARSE_BLOCK_1(list, ...) \\  PARSE_BLOCK_ELEMENT(list, CLEAR(__VA_ARGS__)), PARSE_NEXT(PARSE_BLOCK_2, REMOVE_FIRST(__VA_ARGS__))(list, REMOVE_FIRST(__VA_ARGS__)) <\/code><\/pre>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441 PARSE. \u0414\u043b\u044f \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c MAP. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 MAP \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 EVAL, \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c EVAL:<\/p>\n<pre><code class=\"cpp\">#define PARSE(...) MAP(PARSE_BLOCK, __VA_ARGS__) <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#define OUT  #define EVAL_2(...) __VA_ARGS__ #define EVAL_1(...) EVAL_2(EVAL_2(EVAL_2(EVAL_2(__VA_ARGS__)))) #define EVAL_0(...) EVAL_1(EVAL_1(EVAL_1(EVAL_1(__VA_ARGS__)))) #define EVAL(...) EVAL_0(EVAL_0(EVAL_0(EVAL_0(__VA_ARGS__))))  #define VOID(...)  #define GET_FIRST_LIST_0(...) (__VA_ARGS__) VOID (  #define GET_FIRST_LIST(...) GET_FIRST_LIST_0 __VA_ARGS__ ) \/* GET_FIRST_LIST((1, 2, 3), some, other)   =&gt; GET_FIRST_LIST_0 (1, 2, 3), some, other )   =&gt; (1, 2, 3) VOID( some, other )   =&gt; (1, 2, 3) *\/  #define DELAY_COMMA_0() , #define DELAY_COMMA_1() DELAY_COMMA_0 OUT() #define DELAY_COMMA_2() DELAY_COMMA_1 OUT() #define DELAY_COMMA_3() DELAY_COMMA_2 OUT()  #define DELAY_OPEN_BRACE_0() ( #define DELAY_OPEN_BRACE_1() DELAY_OPEN_BRACE_0 OUT() #define DELAY_OPEN_BRACE_2() DELAY_OPEN_BRACE_1 OUT() #define DELAY_OPEN_BRACE_3() DELAY_OPEN_BRACE_2 OUT()  #define DELAY_CLOSE_BRACE_0() ) #define DELAY_CLOSE_BRACE_1() DELAY_CLOSE_BRACE_0 OUT() #define DELAY_CLOSE_BRACE_2() DELAY_CLOSE_BRACE_1 OUT() #define DELAY_CLOSE_BRACE_3() DELAY_CLOSE_BRACE_2 OUT()  #define EVAL2(...) __VA_ARGS__  #define CONCAT_1(a, b) a##b  #define CONCAT_0(...) CONCAT_1 OUT(__VA_ARGS__)  #define CONCAT(...) EVAL2(CONCAT_0(__VA_ARGS__))  #define IF_ELSE_1(test, next, ...) next OUT #define IF_ELSE_0(test, next, ...) IF_ELSE_1(test, next, __VA_ARGS__, 0)  #define IF_ELSE(condition, t, f) IF_ELSE_0(condition OUT t, f)  \/* #define CHECK_IF_ELSE 0,  IF_ELSE(CHECK_IF_ELSE, true, false)   =&gt; IF_ELSE_0(0, OUT true, false)   =&gt; IF_ELSE_1(0, true, false, 0)   =&gt; true OUT  IF_ELSE(FALSE, true, false)   =&gt; IF_ELSE_0(FALSE OUT true, false)   =&gt; IF_ELSE_1(FALSE true, false, 0)   =&gt; false OUT *\/  #define MAP_CHECK_1() 0, #define MAP_CHECK_0() MAP_CHECK_1  \/* MAP_CHECK_0()()   =&gt; MAP_CHECK_1()   =&gt; 0, *\/  #define MAP_NEXT(test, next) IF_ELSE(MAP_CHECK_0 test, VOID, DELAY_COMMA_2() next)  \/* MAP_NEXT(()(), next)   =&gt; IF_ELSE(MAP_CHECK_0 ()(), VOID, DELAY_COMMA_2() next)   =&gt; VOID  MAP_NEXT(some, next)   =&gt; IF_ELSE(MAP_CHECK_0 some, VOID, DELAY_COMMA_2() next)   =&gt; , next *\/  #define MAP_0(macro, x, next, ...) macro(x) MAP_NEXT(next, MAP_1)(macro, next, __VA_ARGS__) #define MAP_1(macro, x, next, ...) macro(x) MAP_NEXT(next, MAP_0)(macro, next, __VA_ARGS__)  #define MAP(macro, ...) EVAL(MAP_0(macro, __VA_ARGS__, ()(), 0)) \/* #define MACRO(x) x MAP(MACRO, 1, 2)   =&gt; MAP_0(MACRO, 1, 2, ()(), 0)   =&gt; MACRO(1) MAP_NEXT(2, MAP_1) (MACRO, 2, ()(), 0)   =&gt; 1 , MAP_1(MACRO, 2, ()(), 0)   =&gt; 1 , MACRO(2) MAP_NEXT(()(), MAP_0) (MACRO, ()(), 0)   =&gt; 1 , 2 VOID(MACRO, ()(), 0)   =&gt; 1 , 2 *\/  #define REMOVE_A(...) #define REMOVE_B  #define REMOVE_FIRST(x) REMOVE_##x  #define PARSE_CHECK_0_A(...) 0, A(__VA_ARGS__) VOID DELAY_OPEN_BRACE_2()  #define PARSE_CHECK_0_B 0, B VOID DELAY_OPEN_BRACE_2()  #define CLEAR(x) IF_ELSE(PARSE_CHECK_0_##x, DELAY_CLOSE_BRACE_2(), ERROR) \/* CLEAR(A(1, 2, 3) B code)   =&gt; IF_ELSE(PARSE_CHECK_0_A(1, 2, 3) B code, DELAY_CLOSE_BRACE_2(), ERROR)   =&gt; A(1, 2, 3) VOID (B code)   =&gt; A(1, 2, 3) CLEAR(B code)   =&gt; IF_ELSE(PARSE_CHECK_0_B code, DELAY_CLOSE_BRACE_2(), ERROR)   =&gt; B VOID (code)   =&gt; B CLEAR(code)   =&gt; IF_ELSE(PARSE_CHECK_0_code, DELAY_CLOSE_BRACE_2(), ERROR)   =&gt; ERROR *\/  #define PARSE_CHECK_1_A(...) 0,  #define PARSE_CHECK_1_B 0,  #define PARSE_NEXT(macro, ...) IF_ELSE(CONCAT(PARSE_CHECK_1_, CLEAR(__VA_ARGS__)), macro, BASIC_PART)  \/* PARSE_NEXT(PARSE_BLOCK_1, A(1, 2, 3) B code)   =&gt; IF_ELSE(CONCAT(PARSE_CHECK_1_, CLEAR(A(1, 2, 3) B code)), PARSE_BLOCK_1, BASIC_PART)   =&gt; IF_ELSE(PARSE_CHECK_1_A(1, 2, 3), PARSE_BLOCK_1, BASIC_PART)   =&gt; PARSE_BLOCK_1  PARSE_NEXT(PARSE_BLOCK_1, B code)   =&gt; IF_ELSE(CONCAT(PARSE_CHECK_1_, CLEAR(B code)), PARSE_BLOCK_1, BASIC_PART)   =&gt; IF_ELSE(PARSE_CHECK_1_B, PARSE_BLOCK_1, BASIC_PART)   =&gt; PARSE_BLOCK_1 PARSE_NEXT(PARSE_BLOCK_1, code)   =&gt; IF_ELSE(CONCAT(PARSE_CHECK_1_, CLEAR(code)), PARSE_BLOCK_1, BASIC_PART)   =&gt; IF_ELSE(PARSE_CHECK_1_ERROR, PARSE_BLOCK_1, BASIC_PART)   =&gt; BASIC_PART *\/  #define PARSE_CHECK_2_A(...) TRANSFORM_A OUT ((__VA_ARGS__),  #define PARSE_CHECK_2_B TRANSFORM_B OUT (  #define PARSE_BLOCK_ELEMENT(list, ...) CONCAT(PARSE_CHECK_2_, CLEAR(__VA_ARGS__)) list) \/* PARSE_BLOCK_ELEMENT((1, 2, 3), A(4, 5, 6) B code)   =&gt; CONCAT(PARSE_CHECK_2_, CLEAR(A(4, 5, 6) B code)) (1, 2, 3))   =&gt; PARSE_CHECK_2_A(4, 5, 6) (1, 2, 3))   =&gt; TRANSFORM_A((4, 5, 6), (1, 2, 3))  PARSE_BLOCK_ELEMENT((1, 2, 3), B code)   =&gt; CONCAT(PARSE_CHECK_2_, CLEAR(B code)) (1, 2, 3))   =&gt; PARSE_CHECK_2_B (1, 2, 3))   =&gt; TRANSFORM_B((1, 2, 3)) *\/  #define TRANSFORM_A(first, second) ELEMENT_A(second, EVAL2 first) \/* TRANSFORM_A((4, 5, 6), (1, 2, 3))   =&gt; ELEMENT_A((1, 2, 3), EVAL2 (4, 5, 6))   =&gt; ELEMENT_A((1, 2, 3), 4, 5, 6) *\/ #define TRANSFORM_B(...) ELEMENT_B \/* TRANSFORM_B((1, 2, 3))   =&gt; ELEMENT_B *\/  #define PARSE_BLOCK_2(list, ...) \\   PARSE_BLOCK_ELEMENT(list, CLEAR(__VA_ARGS__)), PARSE_NEXT(PARSE_BLOCK_1, REMOVE_FIRST(__VA_ARGS__))(list, REMOVE_FIRST(__VA_ARGS__)) #define PARSE_BLOCK_1(list, ...) \\   PARSE_BLOCK_ELEMENT(list, CLEAR(__VA_ARGS__)), PARSE_NEXT(PARSE_BLOCK_2, REMOVE_FIRST(__VA_ARGS__))(list, REMOVE_FIRST(__VA_ARGS__))  #define PARSE_BLOCK_0(list, ...) PARSE_NEXT(PARSE_BLOCK_1, __VA_ARGS__)(list, __VA_ARGS__)  #define PARSE_BLOCK(...) BLOCK(PARSE_BLOCK_0(GET_FIRST_LIST(__VA_ARGS__), VOID __VA_ARGS__))  #define PARSE(...) MAP(PARSE_BLOCK, __VA_ARGS__)  PARSE((1, 2, 3) A(4, 5, 6) B A(7, 8, 9) other code,       () other code); <\/code><\/pre>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"10\" id=\"10\"><\/a><\/p>\n<h3>\u276f \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0440\u044e\u043a\u043e\u0432 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438.<\/p>\n<p><a href=\"https:\/\/godbolt.org\/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGEgOykrgAyeAyYAHI%2BAEaYxBIAHACspAAOqAqETgwe3r4BaRlZAqHhUSyx8VzJtpj2jgJCBEzEBLk%2BflyBdpgO2U0tBKWRMXGJKQrNre35XbZTQ2EjFWPVSQCUtqhexMjsHOYAzFg04QDUAPJyAComGgCCd49mx5inmGfYAGr3wQD6ZggADoQeszn8\/j8\/vcAEoAcSEEKeRxOS0%2BP3%2BXGBoPRvwBEG%2BeMBhP%2BxIx%2BIhUNhCIh6zp62RL1R5xJfw02KBYNZWO5BPJPP5EEp92h8MRf3pDIeKLeaJJHK55PZrOVSr5ePZwtFNIl9OR0qZsvOXwuAEkACIK\/XPV7vM5w7DXP4AMVNMKETuCpo9bIVZyFkJF1PFYJNFv91pldodTtd7s93uufpjLrdPq9Po04MD2vFZyl9wA9AAqJ4puPpxNQLikM5mWuHTZnBSoNi11AEBBxAtnM4mQ7m\/vYe2O1Pxv4Zp1ZiA1usNpstttnDtd4j5p69\/uDw7Dme1%2BtnRtnMOW5utzDtztxdcPTcDof%2B2cHxtPYuFyOGu3m7DBe4ATT%2BNwLgAWWAkV2TBUhGVtNFv1\/ACgNAkUsTBOD\/0AkCwLZS4bggAso1gn90MQrDAVQoiEMw5CcKTfDP0I%2BCMKQv5Djws40Mo5izBovCPxg84OL%2BC5lGwCI\/gsGF7jcbBfTBCBoOZD5BOE0TxMk6S\/hQ9iKKEkSxIkqSZKzK5aIUo0lJ0lT9PUmSyO0xirLUwzNJ4uj%2BIshy9KcjTWPIzzVIMjTuJM3jpQNdz7OI4ILiEGTAqMti3MUyKEOi2LvJkrTBLcNK4ps7CQqS8yUsA3KMvxPyopivLnK4VyzK\/HScuq8rfJK5r0vigF6rCm1kpJQEQU5bMqTFJFeoI84gIiNx7idLEmFraIwSYI4jmiPjkum2apz9ba5pckKtWDWlNuK\/akyGxVfkBC7fWOsbdTOu1TWdP4f3SrECEwSZa3CVQCFrK6zn%2BggaIatFXve4J0vZb7fpBzAAaBnEoY%2BzKIHhwHEeRkag0e2sNHw8LkrRmHsAgNAGHwBoGFrbGqDBMnYcpgQaeyGizgZ4mi1LCb6KmgAJbA3AAaT%2BZnhw0KDesliA3GFsWJbe9H6eILwLzOKgxCUHs%2B3vHczkl31pc5gh1c17XaF1jd9e3YdjaxU3zY12sraUQm9a3B8XY%2BEzrTl51flitXXa1nXMC9g2HZV8nfSD8mzYtt2I6j%2B2jdjz6IAT2KueT8Prc1onbe9w33b9m5X3ffmIrA5RAMV8WtOliHzjrhuRfFiCznbhXO8060SyeXvG9k0L7jvdOR\/7lCS%2Bjs4W4eN9nrRduImwAANJMsb%2BpGCCZzOKenpWsx348zXNWtsqoiqcf3we%2BfuNfN6TPC8N3gG04fOXj67\/11nfufC0V8mo3zsqDL%2BhsTzWmflvCAi5NYQLnunH%2B9x659xPmeJcJ4QGMRIiKcBe9IHDg\/gQKuK825oN9CwJgyBiCoFrKoUhKNho0LoagCAqgwSwKTKDWs7cuAALYfQ5heNcynRJsVAREBhEMLOEwu%2BLCwSyM4dwqh684F8J7lQomMjaEiMUWIk6EoKEfDrno9hSjcTBAgO3dksjawPR1LWN%2BTYiYFiHpIu0YE3AwguKo%2BRw80G2Kkn42sT5iHaPruyHxYSzhPhcQAtxkTYn%2BMEVEv4GikwHgEXJVJ%2B5EmAOLreO2D46r8KoVifJc5\/5FMieU7Rvj\/FmDUfXLJUAkkVOiXk0JFxCnJOQWUs4%2B4gGWmqa4z2gzDYNLMOQmuyUYTYGAhcL4Ml7hWi8WiRZyzVniVMWcbZKyZIViTFwg5Syjl\/DWi8VQ%2BzlCwnShgru0I\/Sm3WU4kMoySqOS6mRO5DyZJPLZOJBetYLBfOUl5X549W4fBytgWEAS5b3PdIC0eGgrkvCOAo7KZVoVNmwDCPxMIPGP3hYi9ZCTDxgnBWgLAkTkUAo7ifF5VKjy0owJrXFLV8W1kJcSyJlKCnUq%2BRADl9KpnDiFTUl8DxyUwjFWcOlkdJUZ2hrFCAKLHnopBcq3BVVOr5TInyolFwSWqvBSef0yrIlWDlcEBFCqbWqsZai5lzy9XtTxUawB\/KzWRL9TCOZjxNnnC1WimeLzgaLxDX1Yq4b3WaRBTG2FZwE3tIcWcYGcsLqaqZUCrgfxazyoDKNHUdJayZosPcIQpo3B\/BRdcHmni0FMvaQmiw0Ulazmlc%2BGlSrOUMsPvLC4M05p5rdQWotZwS29vnGccVkcmwdq7U3MFNa60NthE2l1w6E1TrndS2sK6LjdvXbW%2BtjbIknu7dadNL8J2dVXZpMFA6JUlNLjHdVFNc37tHoW4tDrEWLorWmplnbT1roXRuy926h3fsfRG7t4lj3gefbOatF6t0wh3R%2B%2BeN6m5PHvXAgjL630qrwyg4dv783\/unSWm1y60OQbI5hzdV7d0Ib\/ZGwNqG3UQbPdBrDHHKMPjY7BnDwbU3caVmYKNOJriSQiEIZ0ZrgLQk5lAD5tIZaxsmh8GT4s5PgsU\/cZTqmYTqfBSZCM8z43MaVj%2BJZokky0DwAjYGNHJ2jzk4Bx1pb8blrBG5yYpKiMOfFk54CLnqzCsbLWdZ0gzgpDOAANn7c60ThsvPav7r5mdQGFWJdrCl9LC7yN0kfHFukqrDMAheUl0rck2U1ay8OUz5m1MvIgI12s6WXEtZ5qRqLMW9wyqbCB1VOWkNGfo4VxVjGqvjevbRvLIKxt9siR1lTXWLCxeW1J0NHxtsWfU%2BsmgxAEZKCpugLkDrosRCdOs67bM%2BUYm4hd0LTwW0na6%2BsnrJW%2BtNg2\/OAN92XPdZa29m6\/petpdaxPUphsRuPch9V2scP0tSYFsdpTO3LPiT9Cjp0dreZPF%2BwTvbIPqVg%2Bc6j0ny87N2lI4CEL2NgYmCSG4W2w3wePYgGzvziLtO6j4%2BldtEWyOHN2ScgL4jdQC\/c9jaXxy0xJhFwj\/TYH%2BPocVx5nEnPuclN53T1zSuhcKo10xt1EudcsYPCrscHo5fGLpHr5XFyZdq5d49TXR3tdPpY%2ByQXWacTEaTKR2cGv3eOJzK7\/5duxZ%2BgE6LRD4ln3snLGricVYNe1itVbhPGrgbmII7HstIY70Av232s4xXktA\/K%2BswIZwEi1gAJxghXNePVttey9jYt3tczrDgWA4JsWgnAki8D8BwLQpBUCcG55YawZ4dh7D7C8HgpACCaHH6QCASA0AsFSHQOI5BKDH9P\/QeIyADBGD%2BC7BgABrPgdBvqXcoNEPfpBohhBaAAJ6cDb5\/7MDEAAEXDRDaC9C77cC8DH5sCCAXAMC0BAFz68BYDRBeDABuBiDWzAEYGYA0JGDiDoGkD4DEAwF4AABuP0P%2BSMvQXg30BB5AggdQP%2Bbm0QxAgBHgWAP%2B5seALALBtBxA0QGQmA5oRBhgwAbmRge%2BmwVABgwACgXweAmAAA7hcKkIwCwfwIICIGIOwFIDIIIIoCoOoGQboDWPfsYNYNYPoHgNEAoPAJsKgKkLTM4RwLwKgCIcQHgFgM4ZAJsD0H0M4BAK4DMJ0EENTMMOUJUHoOkJkLTJEQkUULTLEaMFULUPUP0AsCkTWCEbTAMK0BkSsFkZMIMPkfMIMKUfEYIlsOvkYRPlPjPj\/ovhwPIgkKlgALSpaSBKo2H%2BhP7P5yS4CEAkCb6HCCK8CwFaAVrP4gBJDSyT4cCSCtFkHtG8DOHSyzH75wCwBICpCpAX6Uw2HdH8DEA0KwHb6YA0wkD%2BF6A0C0Af7dFdhMBYCf5kF6HCCiDiDGHfFmFqA\/5WE76UGYAPFEz6AtGkCz7z7tHKCUGpD0J7AKAthrgXBMGpBMGdE9F9EDHSFDHqwv6jF3FrhHCzgeAn5n5klb7rAzHyGbBvEfGUCbALFLFQmrHrFwmcBbEgA7EMkclmBcneE8k74CkiGZDOCSBAA%3D\" rel=\"noopener noreferrer nofollow\">\u041a\u043e\u0434 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u0433\u043e\u0434\u0431\u043e\u043b\u0442\u0435<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/928598\/\"> https:\/\/habr.com\/ru\/articles\/928598\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e, \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<ul>\n<li>\n<p>\u041e\u043d \u043d\u0435 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u044f\u0437\u044b\u043a<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u043a\u0440\u043e\u0441\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0438\u043b\u0438 \u0432\u043e\u0432\u0441\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0432\u0438\u0434\u0443 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439, \u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u0434 \u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u043a\u043e\u0434\u0430 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e.<\/p>\n<p>\u0421\u043e \u0432\u0441\u0435\u043c\u0438 \u0435\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430\u043c\u0438, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0435\u0441\u0442\u044c \u0432 \u044f\u0437\u044b\u043a\u0435 \u0438 \u0434\u043e\u0441\u0442\u043e\u0438\u043d \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p><a href=\"#0\" rel=\"noopener noreferrer nofollow\">\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u044f<\/a><br \/> <a href=\"#1\" rel=\"noopener noreferrer nofollow\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b<\/a>:<\/p>\n<ul>\n<li>\n<p><a href=\"#2\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0440\u043e\u0441, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0442\u0443<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#3\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0440\u043e\u0441, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0432\u0441\u0435\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#4\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0440\u043e\u0441\u044b \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#5\" rel=\"noopener noreferrer nofollow\">\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#6\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#7\" rel=\"noopener noreferrer nofollow\">If-else \u043c\u0430\u043a\u0440\u043e\u0441<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a href=\"#8\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 MAP<\/a><br \/> <a href=\"#9\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0441\u0435\u0440\u0430 \u043d\u0430 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435<\/a><br \/> <a href=\"#10\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<p><a class=\"anchor\" name=\"0\" id=\"0\"><\/a><\/p>\n<h3>\u276f \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u044f<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443, \u043d\u043e \u0432 \u044f\u0437\u044b\u043a\u0435 \u043d\u0435\u0442 \u0446\u0438\u043a\u043b\u043e\u0432, \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cpp\">#define A(x) x B(x) #define B(x) x A(x)  A(0) <\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f, \u043d\u043e \u043e\u043d\u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041f\u043e \u0438\u0442\u043e\u0433\u0443, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0435\u0447\u0442\u043e \u0432\u0440\u043e\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">0 0 A(0) <\/code><\/pre>\n<p>\u041f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f. \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 C23 (\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 C++ \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 C \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430):<\/p>\n<h3>6.10.4.4.1<\/h3>\n<blockquote>\n<p>After all parameters in the replacement list have been substituted and # and ## processing has<br \/> taken place, all placemarker preprocessing tokens are removed. The resulting preprocessing token<br \/> sequence is then rescanned, along with all subsequent preprocessing tokens of the source file, for<br \/> more macro names to replace.<\/p>\n<\/blockquote>\n<h3>6.10.4.4.2<\/h3>\n<blockquote>\n<p>If the name of the macro being replaced is found during this scan of the replacement list (not<br \/> including the rest of the source file\u2019s preprocessing tokens), it is not replaced. Furthermore, if any<br \/> nested replacements encounter the name of the macro being replaced, it is not replaced. These<br \/> nonreplaced macro name preprocessing tokens are no longer available for further replacement even<br \/> if they are later (re)examined in contexts in which that macro name preprocessing token would<br \/> otherwise have been replaced.<\/p>\n<\/blockquote>\n<p>\u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 (\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435). \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 (\u0438\u043b\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432) \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430, \u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u043e. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043d\u043e\u0432\u0430 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 A \u0438 B \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u044f\u0432\u043b\u0435\u043d\u0438\u044f. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u043d\u0435 \u0431\u044b\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d, \u0438 \u0438\u043c\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e. \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438, \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 OUT, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430.<\/p>\n<pre><code class=\"cpp\">#define OUT #define A(x) x B OUT (x) #define B(x) x A OUT (x) <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 A, \u0442\u043e \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u043c \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0448\u0430\u0433. \u0414\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 EVAL \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"cpp\">#define EVAL(...) __VA_ARGS__ <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">#define OUT #define A(x) x B OUT (x) #define B(x) x A OUT (x)  #define EVAL(...) __VA_ARGS__  A(0) EVAL(A(0)) EVAL(EVAL(A(0))) EVAL(EVAL(EVAL(A(0)))) <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>0 B (0) 0 0 A (0) 0 0 0 B (0) 0 0 0 0 A (0) <\/code><\/pre>\n<p>\u0412\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0437\u0430\u0445\u043b\u0430\u043c\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c EVAL, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 EVAL_0, \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 EVAL_1 \u0432\u043d\u0443\u0442\u0440\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">#define EVAL_2(...) __VA_ARGS__ #define EVAL_1(...) EVAL_2(EVAL_2(EVAL_2(EVAL_2(__VA_ARGS__)))) #define EVAL_0(...) EVAL_1(EVAL_1(EVAL_1(EVAL_1(__VA_ARGS__)))) #define EVAL(...) EVAL_0(EVAL_0(EVAL_0(EVAL_0(__VA_ARGS__)))) <\/code><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0441\u0442\u0435\u043a\u0430 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0439. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438.<\/p>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439, \u044f\u0437\u044b\u043a \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u043f\u043e \u0422\u044c\u044e\u0440\u0438\u043d\u0433\u0443. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0441\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438, \u043b\u044e\u0431\u0430\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043c\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0438 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h3>\u276f \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u044b<\/h3>\n<p><a class=\"anchor\" name=\"2\" id=\"2\"><\/a><\/p>\n<h4>\u041c\u0430\u043a\u0440\u043e\u0441, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0442\u0443<\/h4>\n<pre><code class=\"cpp\">#define VOID(...) <\/code><\/pre>\n<p><a class=\"anchor\" name=\"3\" id=\"3\"><\/a><\/p>\n<h4>\u041c\u0430\u043a\u0440\u043e\u0441, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0432\u0441\u0435\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/h4>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, &#171;(123) other&#187;, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f &#171;(123)&#187;. \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 123. \u042d\u0442\u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c VOID \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043b\u0438\u0448\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b.<\/p>\n<pre><code class=\"cpp\">#define GET_FIRST_LIST_0(...) (__VA_ARGS__) VOID ( #define GET_FIRST_LIST(...) GET_FIRST_LIST_0 __VA_ARGS__ ) \/*  GET_FIRST_LIST((1, 2, 3), some, other)  =&gt; GET_FIRST_LIST_0 (1, 2, 3), some, other )  =&gt; (1, 2, 3) VOID( some, other )  =&gt; (1, 2, 3) *\/ <\/code><\/pre>\n<p><a class=\"anchor\" name=\"4\" id=\"4\"><\/a><\/p>\n<h4>\u041c\u0430\u043a\u0440\u043e\u0441\u044b \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439<\/h4>\n<p>\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u0430 \u0434\u0435\u043b\u0430\u044e\u0442 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c \u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a &#8216;,&#8217;, &#8216;(&#8216;, &#8216;)&#8217;. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439.<\/p>\n<pre><code class=\"cpp\">#define DELAY_COMMA_0() , #define DELAY_COMMA_1() DELAY_COMMA_0 OUT() #define DELAY_COMMA_2() DELAY_COMMA_1 OUT() #define DELAY_COMMA_3() DELAY_COMMA_2 OUT()  #define DELAY_OPEN_BRACE_0() ( #define DELAY_OPEN_BRACE_1() DELAY_OPEN_BRACE_0 OUT() #define DELAY_OPEN_BRACE_2() DELAY_OPEN_BRACE_1 OUT() #define DELAY_OPEN_BRACE_3() DELAY_OPEN_BRACE_2 OUT()  #define DELAY_CLOSE_BRACE_0() ) #define DELAY_CLOSE_BRACE_1() DELAY_CLOSE_BRACE_0 OUT() #define DELAY_CLOSE_BRACE_2() DELAY_CLOSE_BRACE_1 OUT() #define DELAY_CLOSE_BRACE_3() DELAY_CLOSE_BRACE_2 OUT() <\/code><\/pre>\n<p>\u0426\u0438\u0444\u0440\u0430 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"5\" id=\"5\"><\/a><\/p>\n<h4>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441<\/h4>\n<pre><code class=\"cpp\">#define EVAL2(...) __VA_ARGS__ <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u0443 EVAL_2, \u043e\u0434\u043d\u0430\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 EVAL \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 EVAL. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0443\u043d\u043a\u0442\u0443 6.10.4.4.2 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 C23, \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0442 \u044d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432 \u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0435\u0433\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 EVAL \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441.<\/p>\n<p><a class=\"anchor\" name=\"6\" id=\"6\"><\/a><\/p>\n<h4>\u041c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/h4>\n<p>\u0412 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ## \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043c\u0430\u043a\u0440\u043e\u0441\u0430\u043c\u0438, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u0445, \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 CONCAT, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0435\u0439:<\/p>\n<pre><code class=\"cpp\">#define CONCAT_1(a, b) a##b #define CONCAT_0(...) CONCAT_1 OUT(__VA_ARGS__) #define CONCAT(...) EVAL2(CONCAT_0(__VA_ARGS__)) <\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043c\u0430\u043a\u0440\u043e\u0441 CONCAT_0 \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0435\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 CONCAT_1, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u043c\u0430\u043a\u0440\u043e\u0441 CONCAT \u0432\u0435\u0440\u043d\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"7\" id=\"7\"><\/a><\/p>\n<h4>If-else \u043c\u0430\u043a\u0440\u043e\u0441<\/h4>\n<p>\u0427\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043c\u0430\u043a\u0440\u043e\u0441\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0440\u0430\u0432\u043d\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 IF_ELSE.<\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d \u043f\u043e\u0437\u0436\u0435, \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u042d\u0442\u043e\u0442 \u043c\u0430\u043a\u0440\u043e\u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u043e \u0441\u0443\u0442\u0438, \u0440\u0430\u0431\u043e\u0442\u0430 IF_ELSE \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u0432 \u043d\u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 IF_ELSE_1 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442. \u0415\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f, \u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0447\u0430\u0441\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0438 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 IF_ELSE. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c, \u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 IF_ELSE:<\/p>\n<pre><code class=\"cpp\">#define IF_ELSE_1(test, next, ...) next OUT #define IF_ELSE_0(test, next, ...) IF_ELSE_1(test, next, __VA_ARGS__, 0)  #define IF_ELSE(condition, t, f) IF_ELSE_0(condition OUT t, f)  #define CHECK_IF_ELSE 0,  \/* IF_ELSE(CHECK_IF_ELSE, true, false)  =&gt; IF_ELSE_0(0, OUT true, false)  =&gt; IF_ELSE_1(0, true, false, 0)  =&gt; true OUT  IF_ELSE(FALSE, true, false)  =&gt; IF_ELSE_0(FALSE OUT true, false)  =&gt; IF_ELSE_1(FALSE true, false, 0)  =&gt; false OUT *\/ <\/code><\/pre>\n<p><a class=\"anchor\" name=\"8\" id=\"8\"><\/a><\/p>\n<h3>\u276f \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0432\u044b\u0441\u0448\u0435\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 MAP<\/h3>\n<p>\u0426\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 MAP, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u043a\u043e \u0432\u0441\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0441\u043f\u0438\u0441\u043a\u0430. \u042d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 map() \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u0432 C++ \u044d\u0442\u043e std::views::transform).<\/p>\n<p>\u0418\u0434\u0435\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432: MAP_0 \u0438 MAP_1. \u042d\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043b\u0438\u0431\u043e MAP_1, \u043b\u0438\u0431\u043e MAP_0.<\/p>\n<pre><code class=\"cpp\">#define MAP_0(macro, x, ...) macro(x), MAP_1 OUT(macro, __VA_ARGS__) #define MAP_1(macro, x, ...) macro(x), MAP_0 OUT(macro, __VA_ARGS__)   EVAL(MAP_1(MACRO, 1, 2, 3)) \/\/ MACRO(1), MACRO(2), MACRO(3), MAP_2 (MACRO, ) <\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 MAP_0 \u0438\u043b\u0438 MAP_1, \u0430 \u043c\u0430\u043a\u0440\u043e\u0441 VOID. \u0414\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0446\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0442 \u0435\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 &#171;()()&#187;. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 &#171;()()&#187;.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 IF_ELSE. \u0412 true-\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c VOID, \u0430 \u0432 false-\u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435 &#8212; \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u044f\u0442\u0443\u044e \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 next, \u0433\u0434\u0435 next &#8212; \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 (MAP_0 \u0438\u043b\u0438 MAP_1).<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043a\u0440\u043e\u0441 MAP_CHECK_0, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 MAP_CHECK_1. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043e\u043d \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">#def<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-473129","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/473129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=473129"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/473129\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=473129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=473129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=473129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}