Title: Function-like macro not expanded a second time in some cases · Issue #231 · cppcheck-opensource/simplecpp · GitHub
Open Graph Title: Function-like macro not expanded a second time in some cases · Issue #231 · cppcheck-opensource/simplecpp
X Title: Function-like macro not expanded a second time in some cases · Issue #231 · cppcheck-opensource/simplecpp
Description: Preprocessing of this code with simplecpp: #define CAT(a, b) CAT2(a, b) #define CAT2(a, b) a ## b #define FOO x #define BAR() CAT(F, OO) #define BAZ CAT(B, AR)() BAZ produces this result: CAT ( F , OO ) All mainstream preprocessors (GCC,...
Open Graph Description: Preprocessing of this code with simplecpp: #define CAT(a, b) CAT2(a, b) #define CAT2(a, b) a ## b #define FOO x #define BAR() CAT(F, OO) #define BAZ CAT(B, AR)() BAZ produces this result: CAT ( F ,...
X Description: Preprocessing of this code with simplecpp: #define CAT(a, b) CAT2(a, b) #define CAT2(a, b) a ## b #define FOO x #define BAR() CAT(F, OO) #define BAZ CAT(B, AR)() BAZ produces this result: CAT ( F ,...
Opengraph URL: https://github.com/cppcheck-opensource/simplecpp/issues/231
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Function-like macro not expanded a second time in some cases","articleBody":"Preprocessing of this code with simplecpp:\r\n```cpp\r\n#define CAT(a, b) CAT2(a, b)\r\n#define CAT2(a, b) a ## b\r\n#define FOO x\r\n#define BAR() CAT(F, OO)\r\n#define BAZ CAT(B, AR)()\r\nBAZ\r\n```\r\nproduces this result:\r\n```\r\nCAT ( F , OO )\r\n```\r\nAll mainstream preprocessors (GCC, Clang, MSVC) produce this result (https://godbolt.org/z/9GhhTarE3):\r\n```\r\nx\r\n```\r\n\r\nIt seems that simplecpp decides to not expand `CAT` a second time during evaluation of `BAZ`. I don't know if this is correct from the point of view of the standard.\r\n\r\nSome additional observations:\r\n1. If the last line is replaced with `CAT(B, AR)()` then all preprocessors produce the same result: `x`.\r\n2. If `BAR()` is converted from function-like macro to regular macro:\r\n ```cpp\r\n #define BAR CAT(F, OO)\r\n #define BAZ CAT(B, AR)\r\n ```\r\n then all preprocessors produce the same result: `CAT ( F , OO )`.\r\n","author":{"url":"https://github.com/dummyunit","@type":"Person","name":"dummyunit"},"datePublished":"2022-01-18T21:55:13.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/231/simplecpp/issues/231"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:48f39aa6-8d2d-4652-007f-339a951df85e |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | DAF0:10B1AF:2453B94:32EAC3E:6A50C3F6 |
| html-safe-nonce | a7bf02dae9a10991921ef54613ce810b5e5f1f684307fbbdf1f9b714970b192b |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEQUYwOjEwQjFBRjoyNDUzQjk0OjMyRUFDM0U6NkE1MEMzRjYiLCJ2aXNpdG9yX2lkIjoiNTc5NDM3MjgzMzU5MDE2NjUxOCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 3430e59dc5c82851c5a3a3128e37b273d8df572f6a86bd63d6b7e87bd6aa8641 |
| hovercard-subject-tag | issue:1107401140 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/cppcheck-opensource/simplecpp/231/issue_layout |
| twitter:image | https://opengraph.githubassets.com/9a1c11ababea8fa87cbc4f6efd6fd684e725eee397f9ccab7fff7e4b2c55a85c/cppcheck-opensource/simplecpp/issues/231 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/9a1c11ababea8fa87cbc4f6efd6fd684e725eee397f9ccab7fff7e4b2c55a85c/cppcheck-opensource/simplecpp/issues/231 |
| og:image:alt | Preprocessing of this code with simplecpp: #define CAT(a, b) CAT2(a, b) #define CAT2(a, b) a ## b #define FOO x #define BAR() CAT(F, OO) #define BAZ CAT(B, AR)() BAZ produces this result: CAT ( F ,... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | dummyunit |
| hostname | github.com |
| expected-hostname | github.com |
| None | 72b13e0e8d0319acdd27a145cfe73f4f06c791713d0ac4690e41fb68ad28cac0 |
| turbo-cache-control | no-preview |
| go-import | github.com/cppcheck-opensource/simplecpp git https://github.com/cppcheck-opensource/simplecpp.git |
| octolytics-dimension-user_id | 278097703 |
| octolytics-dimension-user_login | cppcheck-opensource |
| octolytics-dimension-repository_id | 33434464 |
| octolytics-dimension-repository_nwo | cppcheck-opensource/simplecpp |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 33434464 |
| octolytics-dimension-repository_network_root_nwo | cppcheck-opensource/simplecpp |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 08e79d53fc070870d5b168356afebb1e286a2ffe |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width