CINXE.COM

Macro (computer science) - Wikipedia

<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Macro (computer science) - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"f0715333-1d9c-4fe9-8ecb-34dd252a597b","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Macro_(computer_science)","wgTitle":"Macro (computer science)","wgCurRevisionId":1257555335,"wgRevisionId":1257555335,"wgArticleId":20560,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Articles with short description","Short description is different from Wikidata","All articles with unsourced statements","Articles with unsourced statements from April 2022","Articles needing additional references from September 2024","All articles needing additional references","Articles needing additional references from June 2014","All articles with failed verification","Articles with failed verification from February 2020", "Articles with unsourced statements from February 2020","Pages displaying wikidata descriptions as a fallback via Module:Annotated link","Programming constructs","Source code","Automation software"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Macro_(computer_science)","wgRelevantArticleId":20560,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":30000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain": false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q629579","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready", "wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","mediawiki.page.media","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.quicksurveys.init","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=ext.cite.styles%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/8/82/Jedit_macro_recorder.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="1006"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/8/82/Jedit_macro_recorder.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="671"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Jedit_macro_recorder.png/640px-Jedit_macro_recorder.png"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="536"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Macro (computer science) - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Macro_(computer_science)"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Macro_(computer_science)&amp;action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Macro_(computer_science)"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Macro_computer_science rootpage-Macro_computer_science skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page&#039;s font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&amp;returnto=Macro+%28computer+science%29" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&amp;returnto=Macro+%28computer+science%29" title="You&#039;re encouraged to log in; however, it&#039;s not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&amp;returnto=Macro+%28computer+science%29" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=Macro+%28computer+science%29" title="You&#039;re encouraged to log in; however, it&#039;s not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-Keyboard_and_mouse_macros" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Keyboard_and_mouse_macros"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Keyboard and mouse macros</span> </div> </a> <button aria-controls="toc-Keyboard_and_mouse_macros-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Keyboard and mouse macros subsection</span> </button> <ul id="toc-Keyboard_and_mouse_macros-sublist" class="vector-toc-list"> <li id="toc-Application_macros_and_scripting" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Application_macros_and_scripting"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>Application macros and scripting</span> </div> </a> <ul id="toc-Application_macros_and_scripting-sublist" class="vector-toc-list"> <li id="toc-Macro_virus" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Macro_virus"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1.1</span> <span>Macro virus</span> </div> </a> <ul id="toc-Macro_virus-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> </ul> </li> <li id="toc-Parameterized_and_parameterless_macro" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Parameterized_and_parameterless_macro"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Parameterized and parameterless macro</span> </div> </a> <ul id="toc-Parameterized_and_parameterless_macro-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Text-substitution_macros" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Text-substitution_macros"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Text-substitution macros</span> </div> </a> <button aria-controls="toc-Text-substitution_macros-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Text-substitution macros subsection</span> </button> <ul id="toc-Text-substitution_macros-sublist" class="vector-toc-list"> <li id="toc-Embeddable_languages" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Embeddable_languages"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Embeddable languages</span> </div> </a> <ul id="toc-Embeddable_languages-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Procedural_macros" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Procedural_macros"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Procedural macros</span> </div> </a> <ul id="toc-Procedural_macros-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Syntactic_macros" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Syntactic_macros"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Syntactic macros</span> </div> </a> <button aria-controls="toc-Syntactic_macros-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Syntactic macros subsection</span> </button> <ul id="toc-Syntactic_macros-sublist" class="vector-toc-list"> <li id="toc-Early_Lisp_macros" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Early_Lisp_macros"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1</span> <span>Early Lisp macros</span> </div> </a> <ul id="toc-Early_Lisp_macros-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Anaphoric_macros" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Anaphoric_macros"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.2</span> <span>Anaphoric macros</span> </div> </a> <ul id="toc-Anaphoric_macros-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Hygienic_macros" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Hygienic_macros"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.3</span> <span>Hygienic macros</span> </div> </a> <ul id="toc-Hygienic_macros-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Applications" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Applications"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.4</span> <span>Applications</span> </div> </a> <ul id="toc-Applications-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Macros_for_machine-independent_software" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Macros_for_machine-independent_software"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Macros for machine-independent software</span> </div> </a> <ul id="toc-Macros_for_machine-independent_software-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Assembly_language" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Assembly_language"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Assembly language</span> </div> </a> <ul id="toc-Assembly_language-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-History" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#History"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>History</span> </div> </a> <ul id="toc-History-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Macro (computer science)</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 38 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-38" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">38 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D9%85%D8%A7%D9%83%D8%B1%D9%88_(%D8%B9%D9%84%D9%85_%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8)" title="ماكرو (علم الحاسوب) – Arabic" lang="ar" hreflang="ar" data-title="ماكرو (علم الحاسوب)" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Makros" title="Makros – Azerbaijani" lang="az" hreflang="az" data-title="Makros" data-language-autonym="Azərbaycanca" data-language-local-name="Azerbaijani" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0" title="Макрокоманда – Bulgarian" lang="bg" hreflang="bg" data-title="Макрокоманда" data-language-autonym="Български" data-language-local-name="Bulgarian" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Macro" title="Macro – Catalan" lang="ca" hreflang="ca" data-title="Macro" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Makro_(software)" title="Makro (software) – Czech" lang="cs" hreflang="cs" data-title="Makro (software)" data-language-autonym="Čeština" data-language-local-name="Czech" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Macro_(samling_af_instruktioner)" title="Macro (samling af instruktioner) – Danish" lang="da" hreflang="da" data-title="Macro (samling af instruktioner)" data-language-autonym="Dansk" data-language-local-name="Danish" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Makro" title="Makro – German" lang="de" hreflang="de" data-title="Makro" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Makro" title="Makro – Estonian" lang="et" hreflang="et" data-title="Makro" data-language-autonym="Eesti" data-language-local-name="Estonian" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Macro" title="Macro – Spanish" lang="es" hreflang="es" data-title="Macro" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/Makroo" title="Makroo – Esperanto" lang="eo" hreflang="eo" data-title="Makroo" data-language-autonym="Esperanto" data-language-local-name="Esperanto" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Makro_(informatika)" title="Makro (informatika) – Basque" lang="eu" hreflang="eu" data-title="Makro (informatika)" data-language-autonym="Euskara" data-language-local-name="Basque" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D9%85%D8%A7%DA%A9%D8%B1%D9%88_(%D8%B9%D9%84%D9%88%D9%85_%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87)" title="ماکرو (علوم رایانه) – Persian" lang="fa" hreflang="fa" data-title="ماکرو (علوم رایانه)" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Macro-d%C3%A9finition" title="Macro-définition – French" lang="fr" hreflang="fr" data-title="Macro-définition" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EB%A7%A4%ED%81%AC%EB%A1%9C_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)" title="매크로 (컴퓨터 과학) – Korean" lang="ko" hreflang="ko" data-title="매크로 (컴퓨터 과학)" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%88%E0%A4%95%E0%A5%8D%E0%A4%B0%E0%A5%8B_(%E0%A4%B8%E0%A5%89%E0%A4%AB%E0%A5%8D%E0%A4%9F%E0%A4%B5%E0%A5%87%E0%A4%AF%E0%A4%B0)" title="मैक्रो (सॉफ्टवेयर) – Hindi" lang="hi" hreflang="hi" data-title="मैक्रो (सॉफ्टवेयर)" data-language-autonym="हिन्दी" data-language-local-name="Hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Makro_(ilmu_komputer)" title="Makro (ilmu komputer) – Indonesian" lang="id" hreflang="id" data-title="Makro (ilmu komputer)" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesian" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-is mw-list-item"><a href="https://is.wikipedia.org/wiki/Fj%C3%B6lvaskipun" title="Fjölvaskipun – Icelandic" lang="is" hreflang="is" data-title="Fjölvaskipun" data-language-autonym="Íslenska" data-language-local-name="Icelandic" class="interlanguage-link-target"><span>Íslenska</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Macro_(informatica)" title="Macro (informatica) – Italian" lang="it" hreflang="it" data-title="Macro (informatica)" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/%D7%9E%D7%90%D7%A7%D7%A8%D7%95_(%D7%AA%D7%9B%D7%A0%D7%95%D7%AA)" title="מאקרו (תכנות) – Hebrew" lang="he" hreflang="he" data-title="מאקרו (תכנות)" data-language-autonym="עברית" data-language-local-name="Hebrew" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-kk mw-list-item"><a href="https://kk.wikipedia.org/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%B1%D0%B0%D2%93%D0%B4%D0%B0%D1%80%D0%BB%D0%B0%D0%BC%D0%B0%D0%BB%D0%B0%D1%83" title="Микробағдарламалау – Kazakh" lang="kk" hreflang="kk" data-title="Микробағдарламалау" data-language-autonym="Қазақша" data-language-local-name="Kazakh" class="interlanguage-link-target"><span>Қазақша</span></a></li><li class="interlanguage-link interwiki-ky mw-list-item"><a href="https://ky.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE_%D0%B6%D0%B5_%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D0%B1%D1%83%D0%B9%D1%80%D1%83%D0%BA" title="Макро же макробуйрук – Kyrgyz" lang="ky" hreflang="ky" data-title="Макро же макробуйрук" data-language-autonym="Кыргызча" data-language-local-name="Kyrgyz" class="interlanguage-link-target"><span>Кыргызча</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Makr%C3%B3" title="Makró – Hungarian" lang="hu" hreflang="hu" data-title="Makró" data-language-autonym="Magyar" data-language-local-name="Hungarian" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/Macro_(software)" title="Macro (software) – Dutch" lang="nl" hreflang="nl" data-title="Macro (software)" data-language-autonym="Nederlands" data-language-local-name="Dutch" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%AF%E3%83%AD_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%94%A8%E8%AA%9E)" title="マクロ (コンピュータ用語) – Japanese" lang="ja" hreflang="ja" data-title="マクロ (コンピュータ用語)" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Makro_(informasjonsvitenskap)" title="Makro (informasjonsvitenskap) – Norwegian Bokmål" lang="nb" hreflang="nb" data-title="Makro (informasjonsvitenskap)" data-language-autonym="Norsk bokmål" data-language-local-name="Norwegian Bokmål" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-mhr mw-list-item"><a href="https://mhr.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81" title="Макрос – Eastern Mari" lang="mhr" hreflang="mhr" data-title="Макрос" data-language-autonym="Олык марий" data-language-local-name="Eastern Mari" class="interlanguage-link-target"><span>Олык марий</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wikipedia.org/wiki/%E0%A8%AE%E0%A9%88%E0%A8%95%E0%A8%B0%E0%A9%8B_(%E0%A8%95%E0%A9%B0%E0%A8%AA%E0%A8%BF%E0%A8%8A%E0%A8%9F%E0%A8%B0_%E0%A8%B5%E0%A8%BF%E0%A8%97%E0%A8%BF%E0%A8%86%E0%A8%A8)" title="ਮੈਕਰੋ (ਕੰਪਿਊਟਰ ਵਿਗਿਆਨ) – Punjabi" lang="pa" hreflang="pa" data-title="ਮੈਕਰੋ (ਕੰਪਿਊਟਰ ਵਿਗਿਆਨ)" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="Punjabi" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Makro" title="Makro – Polish" lang="pl" hreflang="pl" data-title="Makro" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Macro" title="Macro – Portuguese" lang="pt" hreflang="pt" data-title="Macro" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Macrosubstitu%C8%9Bie" title="Macrosubstituție – Romanian" lang="ro" hreflang="ro" data-title="Macrosubstituție" data-language-autonym="Română" data-language-local-name="Romanian" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0" title="Макрокоманда – Russian" lang="ru" hreflang="ru" data-title="Макрокоманда" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/Makro" title="Makro – Finnish" lang="fi" hreflang="fi" data-title="Makro" data-language-autonym="Suomi" data-language-local-name="Finnish" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Makro_(datateknik)" title="Makro (datateknik) – Swedish" lang="sv" hreflang="sv" data-title="Makro (datateknik)" data-language-autonym="Svenska" data-language-local-name="Swedish" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Makro_(bilgisayar_bilimi)" title="Makro (bilgisayar bilimi) – Turkish" lang="tr" hreflang="tr" data-title="Makro (bilgisayar bilimi)" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0" title="Макрокоманда – Ukrainian" lang="uk" hreflang="uk" data-title="Макрокоманда" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Macro_(m%C3%A1y_t%C3%ADnh)" title="Macro (máy tính) – Vietnamese" lang="vi" hreflang="vi" data-title="Macro (máy tính)" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamese" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/%E5%B7%A8%E9%9B%86" title="巨集 – Cantonese" lang="yue" hreflang="yue" data-title="巨集" data-language-autonym="粵語" data-language-local-name="Cantonese" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/%E5%B7%A8%E9%9B%86" title="巨集 – Chinese" lang="zh" hreflang="zh" data-title="巨集" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q629579#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Macro_(computer_science)" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Macro_(computer_science)" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Macro_(computer_science)"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Macro_(computer_science)&amp;action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Macro_(computer_science)"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Macro_(computer_science)&amp;action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Macro_(computer_science)" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Macro_(computer_science)" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Macro_(computer_science)&amp;oldid=1257555335" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Macro_(computer_science)&amp;action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&amp;page=Macro_%28computer_science%29&amp;id=1257555335&amp;wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FMacro_%28computer_science%29"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FMacro_%28computer_science%29"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&amp;page=Macro_%28computer_science%29&amp;action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Macro_(computer_science)&amp;printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q629579" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Rule for substituting a set input with a set output</div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">"Macro language" redirects here. For ISO macrolanguages, see <a href="/wiki/ISO_639_macrolanguage" title="ISO 639 macrolanguage">ISO 639 macrolanguage</a>.</div> <figure typeof="mw:File/Thumb"><a href="/wiki/File:Jedit_macro_recorder.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/8/82/Jedit_macro_recorder.png/250px-Jedit_macro_recorder.png" decoding="async" width="250" height="210" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/82/Jedit_macro_recorder.png/375px-Jedit_macro_recorder.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/82/Jedit_macro_recorder.png/500px-Jedit_macro_recorder.png 2x" data-file-width="680" data-file-height="570" /></a><figcaption><a href="/wiki/JEdit" title="JEdit">jEdit's</a> macro editor</figcaption></figure> <p>In <a href="/wiki/Computer_programming" title="Computer programming">computer programming</a>, a <b>macro</b> (short for "<b>macro instruction</b>"; from&#32;<a href="/wiki/Greek_language" title="Greek language">Greek</a>&#32;<i> </i>μακρο<i>-</i>&#160;'long, large'<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">&#91;</span>1<span class="cite-bracket">&#93;</span></a></sup>) is a rule or <a href="/wiki/Pattern" title="Pattern">pattern</a> that specifies how a certain input should be <a href="/wiki/Map_(mathematics)" title="Map (mathematics)">mapped</a> to a replacement output. Applying a macro to an input is known as <b>macro expansion</b>. </p><p>The input and output may be a sequence of <a href="/wiki/Lexical_token" class="mw-redirect" title="Lexical token">lexical tokens</a> or <a href="/wiki/Character_(computing)" title="Character (computing)">characters</a>, or a <a href="/wiki/Abstract_syntax_tree" title="Abstract syntax tree">syntax tree</a>. Character macros are supported in <a href="/wiki/Software_application" class="mw-redirect" title="Software application">software applications</a> to make it easy to invoke common <a href="/wiki/Command_(computing)" title="Command (computing)">command</a> sequences. Token and tree macros are supported in some <a href="/wiki/Programming_language" title="Programming language">programming languages</a> to enable <a href="/wiki/Code_reuse" title="Code reuse">code reuse</a> or to extend the language, sometimes for <a href="/wiki/Domain-specific_languages" class="mw-redirect" title="Domain-specific languages">domain-specific languages</a>. </p><p>Macros are used to make a sequence of computing instructions available to the programmer as a single <a href="/wiki/Program_statement" class="mw-redirect" title="Program statement">program statement</a>, making the programming task less tedious and less error-prone.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">&#91;</span>2<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">&#91;</span>3<span class="cite-bracket">&#93;</span></a></sup> Thus, they are called "macros" because a "big" <a href="/wiki/Block_(programming)" title="Block (programming)">block of code</a> can be expanded from a "small" sequence of characters. Macros often allow positional or keyword parameters that dictate what the <a href="/wiki/Conditional_assembly_language" class="mw-redirect" title="Conditional assembly language">conditional assembler</a> program generates and have been used to create entire <a href="/wiki/Computer_program" title="Computer program">programs</a> or program suites according to such variables as <a href="/wiki/Operating_system" title="Operating system">operating system</a>, <a href="/wiki/Computing_platform" title="Computing platform">platform</a> or other factors. The term derives from "macro instruction", and such expansions were originally used in generating <a href="/wiki/Assembly_language" title="Assembly language">assembly language</a> code. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Keyboard_and_mouse_macros">Keyboard and mouse macros</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=1" title="Edit section: Keyboard and mouse macros"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><b>Keyboard macros</b> and <b>mouse macros</b> allow short sequences of keystrokes and mouse actions to transform into other, usually more time-consuming, sequences of keystrokes and mouse actions. In this way, frequently used or repetitive sequences of keystrokes and mouse movements can be <a href="/wiki/Automate" class="mw-redirect" title="Automate">automated</a>. Separate programs for creating these macros are called <a href="/wiki/Macro_recorder" title="Macro recorder">macro recorders</a>. </p><p>During the 1980s, macro programs&#160;– originally <a href="/wiki/SmartKey" title="SmartKey">SmartKey</a>, then SuperKey, KeyWorks, Prokey&#160;– were very popular, first as a means to automatically format <a href="/wiki/Screenplay" title="Screenplay">screenplays</a>, then for a variety of user-input tasks. These programs were based on the <a href="/wiki/Terminate-and-stay-resident" class="mw-redirect" title="Terminate-and-stay-resident">terminate-and-stay-resident</a> mode of operation and applied to all keyboard input, no matter in which context it occurred. They have to some extent fallen into obsolescence following the advent of mouse-driven user interfaces and the availability of keyboard and mouse macros in applications, such as <a href="/wiki/Word_processor" title="Word processor">word processors</a> and <a href="/wiki/Spreadsheet" title="Spreadsheet">spreadsheets</a>, making it possible to create application-sensitive keyboard macros. </p><p>Keyboard macros can be used in <a href="/wiki/Massively_multiplayer_online_role-playing_game" title="Massively multiplayer online role-playing game">massively multiplayer online role-playing games</a> (MMORPGs) to perform repetitive, but lucrative tasks, thus accumulating resources. As this is done without human effort, it can skew the economy of the game. For this reason, use of macros is a violation of the <a href="/wiki/Terms_of_Service" class="mw-redirect" title="Terms of Service">TOS</a> or <a href="/wiki/EULA" class="mw-redirect" title="EULA">EULA</a> of most MMORPGs, and their administrators spend considerable effort to suppress them.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">&#91;</span>4<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Application_macros_and_scripting">Application macros and scripting</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=2" title="Edit section: Application macros and scripting"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Keyboard and mouse macros that are created using an application's built-in macro features are sometimes called <b>application macros</b>. They are created by carrying out the sequence once and letting the application record the actions. An underlying macro programming language, most commonly a <a href="/wiki/Scripting_language" title="Scripting language">scripting language</a>, with direct access to the features of the application may also exist. </p><p>The programmers' text editor <a href="/wiki/Emacs" title="Emacs">Emacs</a> (short for "editing macros") follows this idea to a conclusion. In effect, most of the editor is made of macros. Emacs was originally devised as a set of macros in the editing language <a href="/wiki/Text_Editor_and_Corrector" class="mw-redirect" title="Text Editor and Corrector">TECO</a>; it was later ported to dialects of <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>. </p><p>Another programmers' text editor, <a href="/wiki/Vim_(text_editor)" title="Vim (text editor)">Vim</a> (a descendant of <a href="/wiki/Vi_(text_editor)" title="Vi (text editor)">vi</a>), also has an implementation of keyboard macros. It can record into a register (macro) what a person types on the keyboard and it can be replayed or edited just like <a href="/wiki/Visual_Basic_for_Applications" title="Visual Basic for Applications">VBA</a> macros for Microsoft Office. Vim also has a scripting language called <a href="/wiki/Vimscript" class="mw-redirect" title="Vimscript">Vimscript</a><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">&#91;</span>5<span class="cite-bracket">&#93;</span></a></sup> to create macros. </p><p><a href="/wiki/Visual_Basic_for_Applications" title="Visual Basic for Applications">Visual Basic for Applications</a> (VBA) is a programming language included in <a href="/wiki/Microsoft_Office" title="Microsoft Office">Microsoft Office</a> from Office 97 through Office 2019 (although it was available in some components of Office prior to Office 97). However, its function has evolved from and replaced the macro languages that were originally included in some of these applications. </p><p><a href="/wiki/XEDIT" title="XEDIT">XEDIT</a>, running on the <a href="/wiki/Conversational_Monitor_System" title="Conversational Monitor System">Conversational Monitor System</a> (CMS) component of <a href="/wiki/VM_(operating_system)" title="VM (operating system)">VM</a>, supports macros written in <a href="/wiki/CMS_EXEC" title="CMS EXEC">EXEC</a>, <a href="/wiki/EXEC2" class="mw-redirect" title="EXEC2">EXEC2</a> and <a href="/wiki/REXX" class="mw-redirect" title="REXX">REXX</a>, and some CMS commands were actually wrappers around XEDIT macros. <a href="/wiki/The_Hessling_Editor" class="mw-redirect" title="The Hessling Editor">The Hessling Editor</a> (THE), a partial clone of XEDIT, supports Rexx macros using Regina and Open <a href="/wiki/Object_REXX" title="Object REXX">Object REXX</a> (oorexx). Many common applications, and some on PCs, use Rexx as a scripting language. </p> <div class="mw-heading mw-heading4"><h4 id="Macro_virus">Macro virus</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=3" title="Edit section: Macro virus"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Macro_virus_(computing)" class="mw-redirect" title="Macro virus (computing)">Macro virus (computing)</a></div> <p><a href="/wiki/Visual_Basic_for_Applications" title="Visual Basic for Applications">VBA</a> has access to most <a href="/wiki/Win32_API" class="mw-redirect" title="Win32 API">Microsoft Windows system calls</a> and executes when documents are opened. This makes it relatively easy to write <a href="/wiki/Computer_virus" title="Computer virus">computer viruses</a> in VBA, commonly known as <a href="/wiki/Macro_virus_(computing)" class="mw-redirect" title="Macro virus (computing)">macro viruses</a>. In the mid-to-late 1990s, this became one of the most common types of computer virus. However, during the late 1990s and to date, <a href="/wiki/Microsoft" title="Microsoft">Microsoft</a> has been patching and updating its programs.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">&#91;<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (April 2022)">citation needed</span></a></i>&#93;</sup> In addition, current anti-virus programs immediately counteract such attacks. </p> <div class="mw-heading mw-heading2"><h2 id="Parameterized_and_parameterless_macro">Parameterized and parameterless macro<span class="anchor" id="Parameterized_macro"></span><span class="anchor" id="Parameterized"></span><span class="anchor" id="Parameterless"></span></h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=4" title="Edit section: Parameterized and parameterless macro"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A <b>parameterized macro</b> is a macro that is able to insert given objects into its expansion. This gives the macro some of the power of a <a href="/wiki/Function_(computer_science)" class="mw-redirect" title="Function (computer science)">function</a>. </p><p>As a simple example, in the <a href="/wiki/C_(programming_language)" title="C (programming language)">C programming language</a>, this is a typical macro that is <i>not</i> a parameterized macro, i.e., a <b>parameterless macro</b>: </p> <pre> <b>#define</b> PI 3.14159 </pre> <p>This causes <code>PI</code> to always be replaced with <code>3.14159</code> wherever it occurs. An example of a parameterized macro, on the other hand, is this: </p> <pre> <b>#define</b> pred(x) ((x)-1) </pre> <p>What this macro expands to depends on what <a href="/wiki/Argument_(computer_science)" class="mw-redirect" title="Argument (computer science)">argument</a> <i>x</i> is passed to it. Here are some possible expansions: </p> <pre> pred(2) → ((2) -1) pred(y+2) → ((y+2) -1) pred(f(5)) → ((f(5))-1) </pre> <p>Parameterized macros are a useful source-level mechanism for performing <a href="/wiki/Inline_expansion" title="Inline expansion">in-line expansion</a>, but in languages such as <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a> where they use simple textual substitution, they have a number of severe disadvantages over other mechanisms for performing in-line expansion, such as <a href="/wiki/Inline_function" title="Inline function">inline functions</a>. </p><p>The parameterized macros used in languages such as <a href="/wiki/Lisp_programming_language" class="mw-redirect" title="Lisp programming language">Lisp</a>, <a href="/wiki/PL/I" title="PL/I">PL/I</a> and <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a>, on the other hand, are much more powerful, able to make decisions about what code to produce based on their arguments; thus, they can effectively be used to perform <a href="/wiki/Run-time_code_generation" class="mw-redirect" title="Run-time code generation">run-time code generation</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Text-substitution_macros">Text-substitution macros</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=5" title="Edit section: Text-substitution macros"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1251242444">.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}</style><table class="box-Unreferenced_section plainlinks metadata ambox ambox-content ambox-Unreferenced" role="presentation"><tbody><tr><td class="mbox-image"><div class="mbox-image-div"><span typeof="mw:File"><a href="/wiki/File:Question_book-new.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/50px-Question_book-new.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/75px-Question_book-new.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/100px-Question_book-new.svg.png 2x" data-file-width="512" data-file-height="399" /></a></span></div></td><td class="mbox-text"><div class="mbox-text-span">This section <b>does not <a href="/wiki/Wikipedia:Citing_sources" title="Wikipedia:Citing sources">cite</a> any <a href="/wiki/Wikipedia:Verifiability" title="Wikipedia:Verifiability">sources</a></b>.<span class="hide-when-compact"> Please help <a href="/wiki/Special:EditPage/Macro_(computer_science)" title="Special:EditPage/Macro (computer science)">improve this section</a> by <a href="/wiki/Help:Referencing_for_beginners" title="Help:Referencing for beginners">adding citations to reliable sources</a>. Unsourced material may be challenged and <a href="/wiki/Wikipedia:Verifiability#Burden_of_evidence" title="Wikipedia:Verifiability">removed</a>.</span> <span class="date-container"><i>(<span class="date">September 2024</span>)</i></span><span class="hide-when-compact"><i> (<small><a href="/wiki/Help:Maintenance_template_removal" title="Help:Maintenance template removal">Learn how and when to remove this message</a></small>)</i></span></div></td></tr></tbody></table> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">See also: <a href="/wiki/General-purpose_macro_processor" title="General-purpose macro processor">General-purpose macro processor</a>, <a href="/wiki/Assembly_language#Macros" title="Assembly language">Assembly language §&#160;Macros</a>, and <a href="/wiki/Algorithm" title="Algorithm">Algorithm</a></div> <p>Languages such as <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a> and some <a href="/wiki/Assembly_language" title="Assembly language">assembly languages</a> have rudimentary macro systems, implemented as <a href="/wiki/Preprocessor" title="Preprocessor">preprocessors</a> to the compiler or assembler. <a href="/wiki/C_preprocessor" title="C preprocessor">C preprocessor</a> macros work by simple textual substitution at the <a href="/wiki/Lexical_token" class="mw-redirect" title="Lexical token">token</a>, rather than the character level. However, the macro facilities of more sophisticated assemblers, e.g., <a href="/wiki/IBM_High_Level_Assembler" class="mw-redirect" title="IBM High Level Assembler">IBM High Level Assembler</a> (HLASM) can't be implemented with a preprocessor; the code for assembling instructions and data is interspersed with the code for assembling macro invocations. </p><p>A classic use of macros is in the computer typesetting system <a href="/wiki/TeX" title="TeX">TeX</a> and its derivatives, where most of the functionality is based on macros. </p><p><a href="/wiki/MacroML" title="MacroML">MacroML</a> is an experimental system that seeks to reconcile <a href="/wiki/Static_typing" class="mw-redirect" title="Static typing">static typing</a> and macro systems. <a href="/wiki/Nemerle" title="Nemerle">Nemerle</a> has typed syntax macros, and one productive way to think of these syntax macros is as a <a href="/wiki/Metaprogramming" title="Metaprogramming">multi-stage computation</a>. </p><p>Other examples: </p> <ul><li><a href="/wiki/M4_(computer_language)" title="M4 (computer language)">m4</a> is a sophisticated stand-alone macro processor.</li> <li><a href="/wiki/TRAC_programming_language" class="mw-redirect" title="TRAC programming language">TRAC</a></li> <li><a href="/wiki/METAL" class="mw-redirect" title="METAL">Macro Extension TAL</a>, accompanying <a href="/wiki/Template_Attribute_Language" title="Template Attribute Language">Template Attribute Language</a></li> <li>SMX: for web pages</li> <li><a href="/wiki/ML/I" title="ML/I">ML/1</a> (Macro Language One)</li> <li><a href="/wiki/Troff" title="Troff">troff</a> and <a href="/wiki/Nroff" title="Nroff">nroff</a>: for typesetting and formatting Unix manpages.</li> <li><a href="/wiki/CMS_EXEC" title="CMS EXEC">CMS EXEC</a>: for command-line macros and application macros</li> <li><a href="/wiki/EXEC_2" title="EXEC 2">EXEC 2</a> in <a href="/wiki/Conversational_Monitor_System" title="Conversational Monitor System">Conversational Monitor System</a> (CMS): for command-line macros and application macros</li> <li><a href="/wiki/CLIST" title="CLIST">CLIST</a> in IBM's <a href="/wiki/Time_Sharing_Option" title="Time Sharing Option">Time Sharing Option</a> (TSO): for command-line macros and application macros</li> <li><a href="/wiki/REXX" class="mw-redirect" title="REXX">REXX</a>: for command-line macros and application macros in, e.g., <a href="/wiki/AmigaOS" title="AmigaOS">AmigaOS</a>, CMS, <a href="/wiki/OS/2" title="OS/2">OS/2</a>, TSO</li> <li><a href="/wiki/SCRIPT_(markup)#SCRIPT_macros" title="SCRIPT (markup)">SCRIPT</a>: for formatting documents</li> <li>Various <a href="/wiki/Shell_(computing)#Text_(CLI)_shells" title="Shell (computing)">shells</a> for, e.g., <a href="/wiki/Linux" title="Linux">Linux</a></li></ul> <p>Some major applications have been written as text macro invoked by other applications, e.g., by <a href="/wiki/XEDIT" title="XEDIT">XEDIT</a> in CMS. </p> <div class="mw-heading mw-heading3"><h3 id="Embeddable_languages">Embeddable languages</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=6" title="Edit section: Embeddable languages"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Some languages, such as <a href="/wiki/PHP" title="PHP">PHP</a>, can be embedded in free-format text, or the source code of other languages. The mechanism by which the code fragments are recognised (for instance, being bracketed by <code>&lt;?php</code> and <code>?&gt;</code>) is similar to a textual macro language, but they are much more powerful, fully featured languages. </p> <div class="mw-heading mw-heading2"><h2 id="Procedural_macros">Procedural macros</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=7" title="Edit section: Procedural macros"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1251242444"><table class="box-Unreferenced_section plainlinks metadata ambox ambox-content ambox-Unreferenced" role="presentation"><tbody><tr><td class="mbox-image"><div class="mbox-image-div"><span typeof="mw:File"><a href="/wiki/File:Question_book-new.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/50px-Question_book-new.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/75px-Question_book-new.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/100px-Question_book-new.svg.png 2x" data-file-width="512" data-file-height="399" /></a></span></div></td><td class="mbox-text"><div class="mbox-text-span">This section <b>does not <a href="/wiki/Wikipedia:Citing_sources" title="Wikipedia:Citing sources">cite</a> any <a href="/wiki/Wikipedia:Verifiability" title="Wikipedia:Verifiability">sources</a></b>.<span class="hide-when-compact"> Please help <a href="/wiki/Special:EditPage/Macro_(computer_science)" title="Special:EditPage/Macro (computer science)">improve this section</a> by <a href="/wiki/Help:Referencing_for_beginners" title="Help:Referencing for beginners">adding citations to reliable sources</a>. Unsourced material may be challenged and <a href="/wiki/Wikipedia:Verifiability#Burden_of_evidence" title="Wikipedia:Verifiability">removed</a>.</span> <span class="date-container"><i>(<span class="date">June 2014</span>)</i></span><span class="hide-when-compact"><i> (<small><a href="/wiki/Help:Maintenance_template_removal" title="Help:Maintenance template removal">Learn how and when to remove this message</a></small>)</i></span></div></td></tr></tbody></table> <p>Macros in the <a href="/wiki/PL/I" title="PL/I">PL/I</a> language are written in a subset of PL/I itself: the compiler executes "<a href="/wiki/Preprocessor" title="Preprocessor">preprocessor</a> statements" at compilation time, and the output of this execution forms part of the code that is compiled. The ability to use a familiar <a href="/wiki/Procedural_language" class="mw-redirect" title="Procedural language">procedural language</a> as the macro language gives power much greater than that of text substitution macros, at the expense of a larger and slower compiler. Macros in PL/I, as well as in many assemblers, may have <a href="/wiki/Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a>, e.g., setting variables that other macros can access. </p><p><a href="/wiki/Frame_technology_(software_engineering)" title="Frame technology (software engineering)">Frame technology</a>'s frame macros have their own command syntax but can also contain text in any language. Each frame is both a generic component in a hierarchy of nested subassemblies, and a procedure for integrating itself with its subassembly frames (a recursive process that resolves integration conflicts in favor of higher level subassemblies). The outputs are custom documents, typically compilable source modules. Frame technology can avoid the proliferation of similar but subtly different components, an issue that has plagued software development since the invention of macros and <a href="/wiki/Subroutine" class="mw-redirect" title="Subroutine">subroutines</a>. </p><p>Most assembly languages have less powerful procedural macro facilities, for example allowing a block of code to be repeated N times for <a href="/wiki/Loop_unwinding" class="mw-redirect" title="Loop unwinding">loop unrolling</a>; but these have a completely different syntax from the actual assembly language. </p> <div class="mw-heading mw-heading2"><h2 id="Syntactic_macros">Syntactic macros</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=8" title="Edit section: Syntactic macros"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Macro systems—such as the C preprocessor described earlier—that work at the level of lexical tokens cannot preserve the lexical structure reliably. Syntactic macro systems work instead at the level of <a href="/wiki/Abstract_syntax_tree" title="Abstract syntax tree">abstract syntax trees</a>, and preserve the lexical structure of the original program. The most widely used implementations of syntactic macro systems are found in <a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>-like languages. These languages are especially suited for this style of macro due to their uniform, parenthesized syntax (known as <a href="/wiki/S-expression" title="S-expression">S-expressions</a>). In particular, uniform syntax makes it easier to determine the invocations of macros. Lisp macros transform the program structure itself, with the full language available to express such transformations. While syntactic macros are often found in Lisp-like languages, they are also available in other languages such as <a href="/wiki/Prolog" title="Prolog">Prolog</a>,<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">&#91;</span>6<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a>,<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">&#91;</span>7<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Dylan_(programming_language)" title="Dylan (programming language)">Dylan</a>,<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">&#91;</span>8<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a>,<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">&#91;</span>9<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Nemerle" title="Nemerle">Nemerle</a>,<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a>,<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">&#91;</span>11<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a>,<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">&#91;</span>12<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Nim_(programming_language)" title="Nim (programming language)">Nim</a>,<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">&#91;</span>13<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Haxe" title="Haxe">Haxe</a>,<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">&#91;</span>14<span class="cite-bracket">&#93;</span></a></sup> and <a href="/wiki/Julia_(programming_language)" title="Julia (programming language)">Julia</a>.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">&#91;</span>15<span class="cite-bracket">&#93;</span></a></sup> They are also available as third-party extensions to <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a><sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">&#91;</span>16<span class="cite-bracket">&#93;</span></a></sup> and <a href="/wiki/C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">&#91;</span>17<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Early_Lisp_macros">Early Lisp macros</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=9" title="Edit section: Early Lisp macros"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Before Lisp had macros, it had so-called <a href="/wiki/Fexpr" title="Fexpr">FEXPRs</a>, function-like operators whose inputs were not the values computed by the arguments but rather the syntactic forms of the arguments, and whose output were values to be used in the computation. In other words, FEXPRs were implemented at the same level as EVAL, and provided a window into the meta-evaluation layer. This was generally found to be a difficult model to reason about effectively.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">&#91;</span>18<span class="cite-bracket">&#93;</span></a></sup> </p><p>In 1963, Timothy Hart proposed adding macros to Lisp 1.5 in <a href="/wiki/AI_Memo" title="AI Memo">AI Memo</a> 57: MACRO Definitions for LISP.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">&#91;</span>19<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Anaphoric_macros">Anaphoric macros</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=10" title="Edit section: Anaphoric macros"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Anaphoric_macro" title="Anaphoric macro">Anaphoric macro</a></div> <p>An anaphoric macro is a type of programming macro that deliberately captures some form supplied to the macro which may be referred to by an anaphor (an expression referring to another). Anaphoric macros first appeared in Paul Graham's On Lisp and their name is a reference to linguistic anaphora—the use of words as a substitute for preceding words. </p> <div class="mw-heading mw-heading3"><h3 id="Hygienic_macros">Hygienic macros</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=11" title="Edit section: Hygienic macros"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Hygienic_macro" title="Hygienic macro">Hygienic macro</a></div> <p>In the mid-eighties, a number of papers<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">&#91;</span>20<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">&#91;</span>21<span class="cite-bracket">&#93;</span></a></sup> introduced the notion of <a href="/wiki/Hygienic_macro" title="Hygienic macro">hygienic macro</a> expansion (<code>syntax-rules</code>), a pattern-based system where the syntactic environments of the macro definition and the macro use are distinct, allowing macro definers and users not to worry about inadvertent variable capture (cf. <a href="/wiki/Referential_transparency" title="Referential transparency">referential transparency</a>). Hygienic macros have been standardized for Scheme in the <a href="/wiki/R5RS" class="mw-redirect" title="R5RS">R5RS</a>, <a href="/wiki/R6RS" class="mw-redirect" title="R6RS">R6RS</a>, and <a href="/wiki/R7RS" class="mw-redirect" title="R7RS">R7RS</a> standards. A number of competing implementations of hygienic macros exist such as <code>syntax-rules</code>, <code>syntax-case</code>, explicit renaming, and syntactic closures. Both <code>syntax-rules</code> and <code>syntax-case</code> have been standardized in the Scheme standards. </p><p>Recently, <a href="/wiki/Racket_(programming_language)" title="Racket (programming language)">Racket</a> has combined the notions of hygienic macros with a "<a href="/w/index.php?title=Tower_of_evaluators&amp;action=edit&amp;redlink=1" class="new" title="Tower of evaluators (page does not exist)">tower of evaluators</a>", so that the syntactic expansion time of one macro system is the ordinary runtime of another block of code,<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">&#91;</span>22<span class="cite-bracket">&#93;</span></a></sup> and showed how to apply interleaved expansion and parsing in a non-parenthesized language.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">&#91;</span>23<span class="cite-bracket">&#93;</span></a></sup> </p><p>A number of languages other than Scheme either implement hygienic macros or implement partially hygienic systems. Examples include <a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a>, <a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a>, <a href="/wiki/Elixir_(programming_language)" title="Elixir (programming language)">Elixir</a>, <a href="/wiki/Julia_(programming_language)" title="Julia (programming language)">Julia</a>, <a href="/wiki/Dylan_(programming_language)" title="Dylan (programming language)">Dylan</a>, <a href="/wiki/Nim_(programming_language)" title="Nim (programming language)">Nim</a>, and <a href="/wiki/Nemerle" title="Nemerle">Nemerle</a>. </p> <div class="mw-heading mw-heading3"><h3 id="Applications">Applications</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=12" title="Edit section: Applications"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <dl><dt>Evaluation order</dt> <dd>Macro systems have a range of uses. Being able to choose the order of evaluation (see <a href="/wiki/Lazy_evaluation" title="Lazy evaluation">lazy evaluation</a> and <a href="/wiki/Strict_function" title="Strict function">non-strict functions</a>) enables the creation of new syntactic constructs (e.g. <a href="/wiki/Control_structures" class="mw-redirect" title="Control structures">control structures</a>) indistinguishable from those built into the language. For instance, in a Lisp dialect that has <code>cond</code> but lacks <code>if</code>, it is possible to define the latter in terms of the former using macros. For example, Scheme has both <a href="/wiki/Continuation" title="Continuation">continuations</a> and hygienic macros, which enables a programmer to design their own control abstractions, such as looping and early exit constructs, without the need to build them into the language.</dd> <dt>Data sub-languages and domain-specific languages</dt> <dd>Next, macros make it possible to define data languages that are immediately compiled into code, which means that constructs such as <a href="/wiki/State_machine" class="mw-redirect" title="State machine">state machines</a> can be implemented in a way that is both natural and efficient.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">&#91;</span>24<span class="cite-bracket">&#93;</span></a></sup></dd> <dt>Binding constructs</dt> <dd>Macros can also be used to introduce new binding constructs. The most well-known example is the transformation of <code>let</code> into the application of a function to a set of arguments.</dd></dl> <p><a href="/wiki/Matthias_Felleisen" title="Matthias Felleisen">Felleisen</a> conjectures<sup id="cite_ref-three-uses_25-0" class="reference"><a href="#cite_note-three-uses-25"><span class="cite-bracket">&#91;</span>25<span class="cite-bracket">&#93;</span></a></sup> that these three categories make up the primary legitimate uses of macros in such a system. Others have proposed alternative uses of macros, such as <a href="/wiki/Anaphoric_macro" title="Anaphoric macro">anaphoric macros</a> in macro systems that are unhygienic or allow selective unhygienic transformation. </p><p>The interaction of macros and other language features has been a productive area of research. For example, <a href="/wiki/Software_component" title="Software component">components</a> and <a href="/wiki/Modular_programming" title="Modular programming">modules</a> are useful for large-scale programming, but the interaction of macros and these other constructs must be defined for their use together. Module and component-systems that can interact with macros have been proposed for Scheme and other languages with macros. For example, the <a href="/wiki/Racket_(programming_language)" title="Racket (programming language)">Racket</a> language extends the notion of a macro system to a syntactic tower, where macros can be written in languages including macros, using hygiene to ensure that syntactic layers are distinct and allowing modules to export macros to other modules. </p> <div class="mw-heading mw-heading2"><h2 id="Macros_for_machine-independent_software">Macros for machine-independent software</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=13" title="Edit section: Macros for machine-independent software"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Macros are normally used to map a short string (macro invocation) to a longer sequence of instructions. Another, less common, use of macros is to do the reverse: to map a sequence of instructions to a macro string. This was the approach taken by the <a href="/wiki/STAGE2" class="mw-redirect" title="STAGE2">STAGE2 Mobile Programming System</a>, which used a rudimentary macro compiler (called SIMCMP) to map the specific instruction set of a given computer into <i>machine-independent</i> macros. Applications (notably compilers) written in these machine-independent macros can then be run without change on any computer equipped with the rudimentary macro compiler. The first application run in such a context is a more sophisticated and powerful macro compiler, written in the machine-independent macro language. This macro compiler is applied to itself, in a <a href="/wiki/Bootstrapping_(computing)" class="mw-redirect" title="Bootstrapping (computing)">bootstrap</a> fashion, to produce a compiled and much more efficient version of itself. The advantage of this approach is that complex applications can be ported from one computer to a very different computer with very little effort (for each target machine architecture, just the writing of the rudimentary macro compiler).<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">&#91;</span>26<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">&#91;</span>27<span class="cite-bracket">&#93;</span></a></sup> The advent of modern programming languages, notably <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a>, for which compilers are available on virtually all computers, has rendered such an approach superfluous. This was, however, one of the first instances (if not the first) of <a href="/wiki/Bootstrapping_(compilers)" title="Bootstrapping (compilers)">compiler bootstrapping</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Assembly_language">Assembly language</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=14" title="Edit section: Assembly language"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>While <i>macro instructions</i> can be defined by a programmer for any set of native assembler program instructions, typically macros are associated with macro libraries delivered with the operating system allowing access to operating system functions such as </p> <ul><li>peripheral access by <a href="/wiki/Access_methods" class="mw-redirect" title="Access methods">access methods</a> (including macros such as OPEN, CLOSE, READ and WRITE)</li> <li>operating system functions such as ATTACH, WAIT and POST for subtask creation and synchronization.<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">&#91;</span>28<span class="cite-bracket">&#93;</span></a></sup> Typically such macros expand into executable code, e.g., for the EXIT macroinstruction,</li> <li>a list of <i>define constant</i> instructions, e.g., for the <a href="/wiki/Data_Control_Block" title="Data Control Block">DCB</a> macro—DTF (Define The File) for <a href="/wiki/DOS/360_and_successors" title="DOS/360 and successors">DOS</a><sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">&#91;</span>29<span class="cite-bracket">&#93;</span></a></sup>—or a combination of code and constants, with the details of the expansion depending on the parameters of the macro instruction (such as a reference to a file and a data area for a READ instruction);</li> <li>the executable code often terminated in either a <i>branch and link register</i> instruction to call a routine, or a <a href="/wiki/Supervisor_call" class="mw-redirect" title="Supervisor call">supervisor call</a> instruction to call an operating system function directly.</li> <li>Generating a <i>Stage 2</i> job stream for <a href="/wiki/System_Generation_(OS)" title="System Generation (OS)">system generation</a> in, e.g., <a href="/wiki/OS/360" class="mw-redirect" title="OS/360">OS/360</a>. Unlike typical macros, sysgen stage 1 macros do not generate data or code to be loaded into storage, but rather use the <b>PUNCH</b> statement to output <a href="/wiki/Job_Control_Language" title="Job Control Language">JCL</a> and associated data.</li></ul> <p>In older operating systems such as those used on IBM mainframes, full operating system functionality was only available to assembler language programs, not to high level language programs (unless assembly language subroutines were used, of course), as the standard macro instructions did not always have counterparts in routines available to high-level languages. </p> <div class="mw-heading mw-heading2"><h2 id="History">History</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=15" title="Edit section: History"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In the mid-1950s, when <a href="/wiki/Assembly_language" title="Assembly language">assembly language</a> programming was commonly used to write programs for <a href="/wiki/Digital_computer" class="mw-redirect" title="Digital computer">digital computers</a>, the use of <b>macro instructions</b> was initiated for two main purposes: to reduce the amount of program coding that had to be written by generating several assembly language statements from one macro instruction and to enforce program writing standards, e.g. specifying input/output commands in standard ways.<sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">&#91;</span>30<span class="cite-bracket">&#93;</span></a></sup> Macro instructions were effectively a middle step between assembly language programming and the <a href="/wiki/High-level_programming_languages" class="mw-redirect" title="High-level programming languages">high-level programming languages</a> that followed, such as <a href="/wiki/FORTRAN" class="mw-redirect" title="FORTRAN">FORTRAN</a> and <a href="/wiki/COBOL" title="COBOL">COBOL</a>. Two of the earliest programming installations to develop "macro languages" for the IBM 705 computer were at Dow Chemical Corp. in Delaware and the Air Material Command, Ballistics Missile Logistics Office in California. A macro instruction written in the format of the target assembly language would be processed by a macro compiler, which was a pre-processor to the assembler, to generate one or more assembly language instructions to be processed next by the assembler program that would translate the assembly language instructions into <a href="/wiki/Machine_language" class="mw-redirect" title="Machine language">machine language</a> instructions.<sup id="cite_ref-cisco_31-0" class="reference"><a href="#cite_note-cisco-31"><span class="cite-bracket">&#91;</span>31<span class="cite-bracket">&#93;</span></a></sup> </p><p>By the late 1950s the macro language was followed by the <a href="/wiki/Macro_Assembler" class="mw-redirect" title="Macro Assembler">Macro Assemblers</a>. This was a combination of both where one program served both functions, that of a macro pre-processor and an assembler in the same package.<sup id="cite_ref-cisco_31-1" class="reference"><a href="#cite_note-cisco-31"><span class="cite-bracket">&#91;</span>31<span class="cite-bracket">&#93;</span></a></sup><sup class="noprint Inline-Template" style="white-space:nowrap;">&#91;<i><a href="/wiki/Wikipedia:Verifiability" title="Wikipedia:Verifiability"><span title="The material near this tag failed verification of its source citation(s). (February 2020)">failed verification</span></a></i>&#93;</sup> </p><p>In 1959, Douglas E. Eastwood and <a href="/wiki/Douglas_McIlroy" title="Douglas McIlroy">Douglas McIlroy</a> of <a href="/wiki/Bell_Labs" title="Bell Labs">Bell Labs</a> introduced conditional and recursive macros into the popular <a href="/wiki/Symbolic_Assembly_Program" title="Symbolic Assembly Program">SAP</a> assembler,<sup id="cite_ref-CSTR99_32-0" class="reference"><a href="#cite_note-CSTR99-32"><span class="cite-bracket">&#91;</span>32<span class="cite-bracket">&#93;</span></a></sup> creating what is known as Macro SAP.<sup id="cite_ref-MSAP_33-0" class="reference"><a href="#cite_note-MSAP-33"><span class="cite-bracket">&#91;</span>33<span class="cite-bracket">&#93;</span></a></sup> McIlroy's 1960 paper was seminal in the area of extending any (including <a href="/wiki/High-level_programming_language" title="High-level programming language">high-level</a>) programming languages through <a href="/wiki/General-purpose_macro_processor" title="General-purpose macro processor">macro processors</a>.<sup id="cite_ref-Lay85_34-0" class="reference"><a href="#cite_note-Lay85-34"><span class="cite-bracket">&#91;</span>34<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-CSTR99_32-1" class="reference"><a href="#cite_note-CSTR99-32"><span class="cite-bracket">&#91;</span>32<span class="cite-bracket">&#93;</span></a></sup> </p><p>Macro Assemblers allowed assembly language programmers to implement their own macro-language and allowed limited portability of code between two machines running the same CPU but different operating systems, for example, early versions of <a href="/wiki/MS-DOS" title="MS-DOS">MS-DOS</a> and <a href="/wiki/CP/M-86" title="CP/M-86">CP/M-86</a>. The macro library would need to be written for each target machine but not the overall assembly language program. Note that more powerful macro assemblers allowed use of conditional assembly constructs in macro instructions that could generate different code on different machines or different operating systems, reducing the need for multiple libraries.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">&#91;<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (February 2020)">citation needed</span></a></i>&#93;</sup> </p><p>In the 1980s and early 1990s, desktop PCs were only running at a few MHz and assembly language routines were commonly used to speed up programs written in C, Fortran, Pascal and others. These languages, at the time, used different calling conventions. Macros could be used to interface routines written in assembly language to the front end of applications written in almost any language. Again, the basic assembly language code remained the same, only the macro libraries needed to be written for each target language.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">&#91;<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (February 2020)">citation needed</span></a></i>&#93;</sup> </p><p>In modern operating systems such as Unix and its derivatives, operating system access is provided through subroutines, usually provided by dynamic libraries. High-level languages such as C offer comprehensive access to operating system functions, obviating the need for assembler language programs for such functionality.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">&#91;<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (February 2020)">citation needed</span></a></i>&#93;</sup> </p><p>Moreover, <a href="/wiki/Standard_library" title="Standard library">standard libraries</a> of several newer programming languages, such as <a href="/wiki/Go_(programming_language)" title="Go (programming language)">Go</a>, actively discourage the use of <a href="/wiki/System_call" title="System call">syscalls</a> in favor of <a href="/wiki/Cross-platform_software" title="Cross-platform software">platform-agnostic</a> libraries as well if not necessary, to improve <a href="/wiki/Portability_(software)" class="mw-redirect" title="Portability (software)">portability</a> and security.<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">&#91;</span>35<span class="cite-bracket">&#93;</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=16" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Anaphoric_macro" title="Anaphoric macro">Anaphoric macro</a>&#160;– type of programming macro<span style="display:none" class="category-wikidata-fallback-annotation">Pages displaying wikidata descriptions as a fallback</span>s</li> <li><a href="/wiki/Assembly_language#Macros" title="Assembly language">Assembly language §&#160;Macros</a> (the origin of the concept of macros)</li> <li><a href="/wiki/Compound_operator" class="mw-redirect" title="Compound operator">Compound operator</a></li> <li><a href="/wiki/Extensible_programming" title="Extensible programming">Extensible programming</a>&#160;– programming mechanisms for extending the language, compiler and runtime environment<span style="display:none" class="category-wikidata-fallback-annotation">Pages displaying wikidata descriptions as a fallback</span></li> <li><a href="/wiki/Fused_operation" class="mw-redirect" title="Fused operation">Fused operation</a></li> <li><a href="/wiki/Hygienic_macro" title="Hygienic macro">Hygienic macro</a>&#160;– Macros whose expansion is guaranteed not to cause the capture of identifiers</li> <li><a href="/wiki/Macro_and_security" title="Macro and security">Macro and security</a></li> <li><a href="/wiki/Programming_by_demonstration" title="Programming by demonstration">Programming by demonstration</a>&#160;– Technique for teaching a computer or a robot new behaviors</li> <li><a href="/wiki/String_interpolation" title="String interpolation">String interpolation</a>&#160;– Replacing placeholders in a string with values</li></ul> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=17" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist"> <div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><i><a href="/wiki/Oxford_English_Dictionary" title="Oxford English Dictionary">Oxford English Dictionary</a></i>, <i>s.v.</i> <a rel="nofollow" class="external text" href="https://www.oed.com/view/Entry/111926">macro</a>, <a rel="nofollow" class="external text" href="https://www.oed.com/view/Entry/233194">macro-instruction</a>, and <a rel="nofollow" class="external text" href="https://www.oed.com/view/Entry/111927">macro-</a></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite id="CITEREFGreenwaldKane1959" class="citation journal cs1">Greenwald, Irwin D.; Kane, Maureen (April 1959). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F320964.320967">"The Share 709 System: Programming and Modification"</a>. <i>Journal of the ACM</i>. <b>6</b> (2). New York, NY, USA: ACM: 128–133. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F320964.320967">10.1145/320964.320967</a></span>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&#160;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:27424222">27424222</a>. <q>One of the important uses of programmer macros is to save time and clerical-type errors in writing sequence of instructions which are often repeated in the course of a program.</q></cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.jtitle=Journal+of+the+ACM&amp;rft.atitle=The+Share+709+System%3A+Programming+and+Modification&amp;rft.volume=6&amp;rft.issue=2&amp;rft.pages=128-133&amp;rft.date=1959-04&amp;rft_id=info%3Adoi%2F10.1145%2F320964.320967&amp;rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A27424222%23id-name%3DS2CID&amp;rft.aulast=Greenwald&amp;rft.aufirst=Irwin+D.&amp;rft.au=Kane%2C+Maureen&amp;rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F320964.320967&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFStrachey1965" class="citation journal cs1"><a href="/wiki/Christopher_Strachey" title="Christopher Strachey">Strachey, Christopher</a> (October 1965). <a rel="nofollow" class="external text" href="https://doi.org/10.1093%2Fcomjnl%2F8.3.225">"A General Purpose Macrogenerator"</a>. <i>Computer Journal</i>. <b>8</b> (3): 225–241. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1093%2Fcomjnl%2F8.3.225">10.1093/comjnl/8.3.225</a></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.jtitle=Computer+Journal&amp;rft.atitle=A+General+Purpose+Macrogenerator&amp;rft.volume=8&amp;rft.issue=3&amp;rft.pages=225-241&amp;rft.date=1965-10&amp;rft_id=info%3Adoi%2F10.1093%2Fcomjnl%2F8.3.225&amp;rft.aulast=Strachey&amp;rft.aufirst=Christopher&amp;rft_id=https%3A%2F%2Fdoi.org%2F10.1093%252Fcomjnl%252F8.3.225&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.runescape.com/">"Runescape: The Massive Online Adventure Game by Jagex Ltd"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2008-04-03</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Runescape%3A+The+Massive+Online+Adventure+Game+by+Jagex+Ltd.&amp;rft_id=http%3A%2F%2Fwww.runescape.com%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.vim.org/scripts/index.php">"scripts: vim online"</a>. <i>www.vim.org</i>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=www.vim.org&amp;rft.atitle=scripts%3A+vim+online&amp;rft_id=https%3A%2F%2Fwww.vim.org%2Fscripts%2Findex.php&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.metalevel.at/prolog/macros">"Prolog Macros"</a>. <i>www.metalevel.at</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-04-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=www.metalevel.at&amp;rft.atitle=Prolog+Macros&amp;rft_id=https%3A%2F%2Fwww.metalevel.at%2Fprolog%2Fmacros&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://erlang.org/doc/reference_manual/macros.html#defining-and-using-macros">"Erlang -- Preprocessor"</a>. <i>erlang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-05-24</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=erlang.org&amp;rft.atitle=Erlang+--+Preprocessor&amp;rft_id=https%3A%2F%2Ferlang.org%2Fdoc%2Freference_manual%2Fmacros.html%23defining-and-using-macros&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://opendylan.org/articles/macro-system/index.html">"The Dylan Macro System — Open Dylan"</a>. <i>opendylan.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-04-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=opendylan.org&amp;rft.atitle=The+Dylan+Macro+System+%E2%80%94+Open+Dylan&amp;rft_id=https%3A%2F%2Fopendylan.org%2Farticles%2Fmacro-system%2Findex.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.scala-lang.org/overviews/macros/overview.html">"Def Macros"</a>. <i>Scala Documentation</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-04-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Scala+Documentation&amp;rft.atitle=Def+Macros&amp;rft_id=https%3A%2F%2Fdocs.scala-lang.org%2Foverviews%2Fmacros%2Foverview.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://nemerle.org/About">"About - Nemerle programming language official site"</a>. <i>nemerle.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-04-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=nemerle.org&amp;rft.atitle=About+-+Nemerle+programming+language+official+site&amp;rft_id=http%3A%2F%2Fnemerle.org%2FAbout&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://doc.rust-lang.org/book/ch19-06-macros.html">"Macros - The Rust Programming Language"</a>. <i>doc.rust-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-04-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=doc.rust-lang.org&amp;rft.atitle=Macros+-+The+Rust+Programming+Language&amp;rft_id=https%3A%2F%2Fdoc.rust-lang.org%2Fbook%2Fch19-06-macros.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://elixir-lang.org/getting-started/meta/macros.html">"Macros"</a>. <i>elixir-lang.github.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-04-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=elixir-lang.github.com&amp;rft.atitle=Macros&amp;rft_id=https%3A%2F%2Felixir-lang.org%2Fgetting-started%2Fmeta%2Fmacros.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://nim-lang.org/docs/macros.html">"macros"</a>. <i>nim-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-04-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=nim-lang.org&amp;rft.atitle=macros&amp;rft_id=https%3A%2F%2Fnim-lang.org%2Fdocs%2Fmacros.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://haxe.org/manual/macro.html">"Macros"</a>. <i>Haxe - The Cross-platform Toolkit</i>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Haxe+-+The+Cross-platform+Toolkit&amp;rft.atitle=Macros&amp;rft_id=https%3A%2F%2Fhaxe.org%2Fmanual%2Fmacro.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.julialang.org/en/v1/manual/metaprogramming/#man-macros">"Metaprogramming · The Julia Language"</a>. <i>docs.julialang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-04-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=docs.julialang.org&amp;rft.atitle=Metaprogramming+%C2%B7+The+Julia+Language&amp;rft_id=https%3A%2F%2Fdocs.julialang.org%2Fen%2Fv1%2Fmanual%2Fmetaprogramming%2F%23man-macros&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.sweetjs.org/">"Sweet.js - Hygienic Macros for JavaScript"</a>. <i>www.sweetjs.org</i>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=www.sweetjs.org&amp;rft.atitle=Sweet.js+-+Hygienic+Macros+for+JavaScript&amp;rft_id=https%3A%2F%2Fwww.sweetjs.org%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ecsharp.net/lemp/">"LeMP Home Page · Enhanced C#"</a>. <i>ecsharp.net</i>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=ecsharp.net&amp;rft.atitle=LeMP+Home+Page+%C2%B7+Enhanced+C%23&amp;rft_id=http%3A%2F%2Fecsharp.net%2Flemp%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMarshall" class="citation web cs1">Marshall, Joe. <a rel="nofollow" class="external text" href="http://www.brinckerhoff.org/scraps/joe-marshall-on-FEXPRS-and-DEFMACRO.txt">"untitled email"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">May 3,</span> 2012</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=untitled+email&amp;rft.aulast=Marshall&amp;rft.aufirst=Joe&amp;rft_id=http%3A%2F%2Fwww.brinckerhoff.org%2Fscraps%2Fjoe-marshall-on-FEXPRS-and-DEFMACRO.txt&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHart1963" class="citation magazine cs1">Hart, Timothy P. (October 1963). "MACRO Definitions for LISP". <i>AI Memos</i>. <a href="/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://hdl.handle.net/1721.1%2F6111">1721.1/6111</a></span>. AIM-057.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.jtitle=AI+Memos&amp;rft.atitle=MACRO+Definitions+for+LISP&amp;rft.date=1963-10&amp;rft_id=info%3Ahdl%2F1721.1%2F6111&amp;rft.aulast=Hart&amp;rft.aufirst=Timothy+P.&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKohlbeckerFriedmanFelleisenDuba1986" class="citation conference cs1">Kohlbecker, Eugene; Friedman, Daniel; Felleisen, Matthias; Duba, Bruce (1986). "Hygienic Macro Expansion". <i>LFP '86: Proceedings of the 1986 ACM conference on LISP and functional programming</i>. pp.&#160;151–161. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F319838.319859">10.1145/319838.319859</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&#160;<a href="/wiki/Special:BookSources/0897912004" title="Special:BookSources/0897912004"><bdi>0897912004</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=conference&amp;rft.atitle=Hygienic+Macro+Expansion&amp;rft.btitle=LFP+%2786%3A+Proceedings+of+the+1986+ACM+conference+on+LISP+and+functional+programming&amp;rft.pages=151-161&amp;rft.date=1986&amp;rft_id=info%3Adoi%2F10.1145%2F319838.319859&amp;rft.isbn=0897912004&amp;rft.aulast=Kohlbecker&amp;rft.aufirst=Eugene&amp;rft.au=Friedman%2C+Daniel&amp;rft.au=Felleisen%2C+Matthias&amp;rft.au=Duba%2C+Bruce&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="http://portal.acm.org/citation.cfm?id=99583.99607">[1]</a> Clinger, Rees. "Macros that Work"</span> </li> <li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFFlatt" class="citation news cs1">Flatt, Matthew. <a rel="nofollow" class="external text" href="http://www.cs.utah.edu/plt/publications/macromod.pdf">"Composable and compilable macros: you want it when?"</a> <span class="cs1-format">(PDF)</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.atitle=Composable+and+compilable+macros%3A+you+want+it+when%3F&amp;rft.aulast=Flatt&amp;rft.aufirst=Matthew&amp;rft_id=http%3A%2F%2Fwww.cs.utah.edu%2Fplt%2Fpublications%2Fmacromod.pdf&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRafkindFlatt" class="citation news cs1">Rafkind, Jon; Flatt, Matthew. <a rel="nofollow" class="external text" href="http://www.cs.utah.edu/plt/publications/gpce12-rf.pdf">"Honu: Syntactic Extension for Algebraic Notation through Enforestation"</a> <span class="cs1-format">(PDF)</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.atitle=Honu%3A+Syntactic+Extension+for+Algebraic+Notation+through+Enforestation&amp;rft.aulast=Rafkind&amp;rft.aufirst=Jon&amp;rft.au=Flatt%2C+Matthew&amp;rft_id=http%3A%2F%2Fwww.cs.utah.edu%2Fplt%2Fpublications%2Fgpce12-rf.pdf&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://cs.brown.edu/~sk/Publications/Papers/Published/sk-automata-macros/">"Automata via Macros"</a>. <i>cs.brown.edu</i>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=cs.brown.edu&amp;rft.atitle=Automata+via+Macros&amp;rft_id=http%3A%2F%2Fcs.brown.edu%2F~sk%2FPublications%2FPapers%2FPublished%2Fsk-automata-macros%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-three-uses-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-three-uses_25-0">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg01539.html">[2]</a>, Matthias Felleisen, LL1 mailing list posting</span> </li> <li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFOrgassWaite1969" class="citation journal cs1">Orgass, Richard J.; Waite, William M. (September 1969). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F363219.363226">"A base for a mobile programming system"</a>. <i>Communications of the ACM</i>. <b>12</b> (9). New York, NY, USA: ACM: 507–510. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F363219.363226">10.1145/363219.363226</a></span>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&#160;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:8164996">8164996</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.jtitle=Communications+of+the+ACM&amp;rft.atitle=A+base+for+a+mobile+programming+system&amp;rft.volume=12&amp;rft.issue=9&amp;rft.pages=507-510&amp;rft.date=1969-09&amp;rft_id=info%3Adoi%2F10.1145%2F363219.363226&amp;rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A8164996%23id-name%3DS2CID&amp;rft.aulast=Orgass&amp;rft.aufirst=Richard+J.&amp;rft.au=Waite%2C+William+M.&amp;rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F363219.363226&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWaite1970" class="citation journal cs1">Waite, William M. (July 1970). "The mobile programming system: STAGE2". <i>Communications of the ACM</i>. <b>13</b> (7). New York, NY, USA: ACM: 415–421. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F362686.362691">10.1145/362686.362691</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a>&#160;<a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:11733598">11733598</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.jtitle=Communications+of+the+ACM&amp;rft.atitle=The+mobile+programming+system%3A+STAGE2&amp;rft.volume=13&amp;rft.issue=7&amp;rft.pages=415-421&amp;rft.date=1970-07&amp;rft_id=info%3Adoi%2F10.1145%2F362686.362691&amp;rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A11733598%23id-name%3DS2CID&amp;rft.aulast=Waite&amp;rft.aufirst=William+M.&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.unf.edu/~cwinton/html/cop3601/s10/class.notes/asm6-Macros.pdf">"University of North Florida"</a> <span class="cs1-format">(PDF)</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=University+of+North+Florida&amp;rft_id=https%3A%2F%2Fwww.unf.edu%2F~cwinton%2Fhtml%2Fcop3601%2Fs10%2Fclass.notes%2Fasm6-Macros.pdf&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.ibm.com/support/knowledgecenter?origURL=api/redirect/zvm/v5r4/index.jsp">"DTF (DOS/VSE)"</a>. <i><a href="/wiki/IBM" title="IBM">IBM</a></i>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=IBM&amp;rft.atitle=DTF+%28DOS%2FVSE%29&amp;rft_id=https%3A%2F%2Fwww.ibm.com%2Fsupport%2Fknowledgecenter%3ForigURL%3Dapi%2Fredirect%2Fzvm%2Fv5r4%2Findex.jsp&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/asmr102115.htm">"IBM Knowledge Center"</a>. <i>IBM Knowledge Center</i>. 16 August 2013.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=IBM+Knowledge+Center&amp;rft.atitle=IBM+Knowledge+Center&amp;rft.date=2013-08-16&amp;rft_id=http%3A%2F%2Fwww.ibm.com%2Fsupport%2Fknowledgecenter%2FSSLTBW_2.1.0%2Fcom.ibm.zos.v2r1.asma400%2Fasmr102115.htm&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-cisco-31"><span class="mw-cite-backlink">^ <a href="#cite_ref-cisco_31-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-cisco_31-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.cisco.com/c/en/us/td/docs/ios/sw_upgrades/interlink/r2_0/api_ref/ammac.html#wp1686">"Assembler Language Macro Instructions"</a>. <i>Cisco</i>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Cisco&amp;rft.atitle=Assembler+Language+Macro+Instructions&amp;rft_id=http%3A%2F%2Fwww.cisco.com%2Fc%2Fen%2Fus%2Ftd%2Fdocs%2Fios%2Fsw_upgrades%2Finterlink%2Fr2_0%2Fapi_ref%2Fammac.html%23wp1686&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-CSTR99-32"><span class="mw-cite-backlink">^ <a href="#cite_ref-CSTR99_32-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-CSTR99_32-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHolbrookBrown" class="citation web cs1">Holbrook, Bernard D.; Brown, W. Stanley. <a rel="nofollow" class="external text" href="https://archive.today/20140902215751/http://cm.bell-labs.com/cm/cs/cstr/99.html">"Computing Science Technical Report No. 99 – A History of Computing Research at Bell Laboratories (1937–1975)"</a>. <a href="/wiki/Bell_Labs" title="Bell Labs">Bell Labs</a>. Archived from <a rel="nofollow" class="external text" href="http://cm.bell-labs.com/cm/cs/cstr/99.html">the original</a> on September 2, 2014<span class="reference-accessdate">. Retrieved <span class="nowrap">February 2,</span> 2020</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Computing+Science+Technical+Report+No.+99+%E2%80%93+A+History+of+Computing+Research+at+Bell+Laboratories+%281937%E2%80%931975%29&amp;rft.pub=Bell+Labs&amp;rft.aulast=Holbrook&amp;rft.aufirst=Bernard+D.&amp;rft.au=Brown%2C+W.+Stanley&amp;rft_id=http%3A%2F%2Fcm.bell-labs.com%2Fcm%2Fcs%2Fcstr%2F99.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-MSAP-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-MSAP_33-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation encyclopaedia cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080813125120/http://hopl.murdoch.edu.au/showlanguage.prx?exp=91">"Macro SAP – Macro compiler modification of SAP"</a>. <i>HOPL: Online Historical Encyclopaedia of Programming Languages</i>. Archived from <a rel="nofollow" class="external text" href="http://hopl.murdoch.edu.au/showlanguage.prx?exp=91">the original</a> on August 13, 2008.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.atitle=Macro+SAP+%E2%80%93+Macro+compiler+modification+of+SAP&amp;rft.btitle=HOPL%3A+Online+Historical+Encyclopaedia+of+Programming+Languages&amp;rft_id=http%3A%2F%2Fhopl.murdoch.edu.au%2Fshowlanguage.prx%3Fexp%3D91&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-Lay85-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-Lay85_34-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLayzell1985" class="citation journal cs1"><a href="/wiki/Paul_Layzell" title="Paul Layzell">Layzell, P.</a> (1985). <a rel="nofollow" class="external text" href="https://doi.org/10.1093%2Fcomjnl%2F28.1.29">"The History of Macro Processors in Programming Language Extensibility"</a>. <i>The Computer Journal</i>. <b>28</b> (1): 29–33. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1093%2Fcomjnl%2F28.1.29">10.1093/comjnl/28.1.29</a></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.jtitle=The+Computer+Journal&amp;rft.atitle=The+History+of+Macro+Processors+in+Programming+Language+Extensibility&amp;rft.volume=28&amp;rft.issue=1&amp;rft.pages=29-33&amp;rft.date=1985&amp;rft_id=info%3Adoi%2F10.1093%2Fcomjnl%2F28.1.29&amp;rft.aulast=Layzell&amp;rft.aufirst=P.&amp;rft_id=https%3A%2F%2Fdoi.org%2F10.1093%252Fcomjnl%252F28.1.29&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> <li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://pkg.go.dev/syscall">"syscall package - syscall - Go Packages"</a>. <i>pkg.go.dev</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-06-06</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=pkg.go.dev&amp;rft.atitle=syscall+package+-+syscall+-+Go+Packages&amp;rft_id=https%3A%2F%2Fpkg.go.dev%2Fsyscall&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AMacro+%28computer+science%29" class="Z3988"></span></span> </li> </ol></div></div> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Macro_(computer_science)&amp;action=edit&amp;section=18" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.asma400/macifmt.htm">How to write Macro Instructions</a></li> <li><a rel="nofollow" class="external text" href="http://meseec.ce.rit.edu/eecc250-winter99/250-2-2-2000.pdf">Rochester Institute of Technology, Professors Powerpoint</a></li></ul> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="Programming_paradigms_(Comparison_by_language)" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Programming_paradigms_navbox" title="Template:Programming paradigms navbox"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Programming_paradigms_navbox" title="Template talk:Programming paradigms navbox"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Programming_paradigms_navbox" title="Special:EditPage/Template:Programming paradigms navbox"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Programming_paradigms_(Comparison_by_language)" style="font-size:114%;margin:0 4em"><a href="/wiki/Programming_paradigm" title="Programming paradigm">Programming paradigms</a> (<a href="/wiki/Comparison_of_multi-paradigm_programming_languages" title="Comparison of multi-paradigm programming languages">Comparison by language</a>)</div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Imperative_programming" title="Imperative programming">Imperative</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Structured_programming" title="Structured programming">Structured</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Jackson_structured_programming" title="Jackson structured programming">Jackson structures</a></li> <li><a href="/wiki/Block_(programming)" title="Block (programming)">Block-structured</a></li> <li><a href="/wiki/Modular_programming" title="Modular programming">Modular</a></li> <li><a href="/wiki/Non-structured_programming" title="Non-structured programming">Non-structured</a></li> <li><a href="/wiki/Procedural_programming" title="Procedural programming">Procedural</a></li> <li><a href="/wiki/Programming_in_the_large_and_programming_in_the_small" title="Programming in the large and programming in the small">Programming in the large and in the small</a></li> <li><a href="/wiki/Design_by_contract" title="Design by contract">Design by contract</a></li> <li><a href="/wiki/Invariant-based_programming" title="Invariant-based programming">Invariant-based</a></li> <li><a href="/wiki/Nested_function" title="Nested function">Nested function</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Object-oriented_programming" title="Object-oriented programming">Object-oriented</a><br />(<a href="/wiki/Comparison_of_programming_languages_(object-oriented_programming)" title="Comparison of programming languages (object-oriented programming)">comparison</a>, <a href="/wiki/List_of_object-oriented_programming_languages" title="List of object-oriented programming languages">list</a>)</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Class-based_programming" title="Class-based programming">Class-based</a>, <a href="/wiki/Prototype-based_programming" title="Prototype-based programming">Prototype-based</a>, <a href="/wiki/Object-based_language" title="Object-based language">Object-based</a></li> <li><a href="/wiki/Agent-oriented_programming" title="Agent-oriented programming">Agent</a></li> <li><a href="/wiki/Immutable_object" title="Immutable object">Immutable object</a></li> <li><a href="/wiki/Persistent_programming_language" title="Persistent programming language">Persistent</a></li> <li><a href="/wiki/Uniform_Function_Call_Syntax" title="Uniform Function Call Syntax">Uniform Function Call Syntax</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Declarative_programming" title="Declarative programming">Declarative</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Functional_programming" title="Functional programming">Functional</a><br />(<a href="/wiki/Comparison_of_functional_programming_languages" title="Comparison of functional programming languages">comparison</a>)</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Recursion_(computer_science)" title="Recursion (computer science)">Recursive</a></li> <li><a href="/wiki/Anonymous_function" title="Anonymous function">Anonymous function</a> (<a href="/wiki/Partial_application" title="Partial application">Partial application</a>)</li> <li><a href="/wiki/Higher-order_programming" title="Higher-order programming">Higher-order</a></li> <li><a href="/wiki/Purely_functional_programming" title="Purely functional programming">Purely functional</a></li> <li><a href="/wiki/Total_functional_programming" title="Total functional programming">Total</a></li> <li><a href="/wiki/Strict_programming_language" title="Strict programming language">Strict</a></li> <li><a href="/wiki/Generalized_algebraic_data_type" title="Generalized algebraic data type">GADTs</a></li> <li><a href="/wiki/Dependent_type" title="Dependent type">Dependent types</a></li> <li><a href="/wiki/Functional_logic_programming" title="Functional logic programming">Functional logic</a></li> <li><a href="/wiki/Tacit_programming" title="Tacit programming">Point-free style</a></li> <li><a href="/wiki/Expression-oriented_programming_language" title="Expression-oriented programming language">Expression-oriented</a></li> <li><a href="/wiki/Applicative_programming_language" title="Applicative programming language">Applicative</a>, <a href="/wiki/Concatenative_programming_language" title="Concatenative programming language">Concatenative</a></li> <li><a href="/wiki/Function-level_programming" title="Function-level programming">Function-level</a>, <a href="/wiki/Value-level_programming" title="Value-level programming">Value-level</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Dataflow_programming" title="Dataflow programming">Dataflow</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Flow-based_programming" title="Flow-based programming">Flow-based</a></li> <li><a href="/wiki/Reactive_programming" title="Reactive programming">Reactive</a> (<a href="/wiki/Functional_reactive_programming" title="Functional reactive programming">Functional reactive</a>)</li> <li><a href="/wiki/Signal_programming" class="mw-redirect" title="Signal programming">Signals</a></li> <li><a href="/wiki/Stream_processing" title="Stream processing">Streams</a></li> <li><a href="/wiki/Synchronous_programming_language" title="Synchronous programming language">Synchronous</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Logic_programming" title="Logic programming">Logic</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Abductive_logic_programming" title="Abductive logic programming">Abductive logic</a></li> <li><a href="/wiki/Answer_set_programming" title="Answer set programming">Answer set</a></li> <li><a href="/wiki/Constraint_programming" title="Constraint programming">Constraint</a> (<a href="/wiki/Constraint_logic_programming" title="Constraint logic programming">Constraint logic</a>)</li> <li><a href="/wiki/Inductive_logic_programming" title="Inductive logic programming">Inductive logic</a></li> <li><a href="/wiki/Nondeterministic_programming" title="Nondeterministic programming">Nondeterministic</a></li> <li><a href="/wiki/Ontology_language" title="Ontology language">Ontology</a></li> <li><a href="/wiki/Probabilistic_logic_programming" title="Probabilistic logic programming">Probabilistic logic</a></li> <li><a href="/wiki/Query_language" title="Query language">Query</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Domain-specific_language" title="Domain-specific language">DSL</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Algebraic_modeling_language" title="Algebraic modeling language">Algebraic modeling</a></li> <li><a href="/wiki/Array_programming" title="Array programming">Array</a></li> <li><a href="/wiki/Automata-based_programming" title="Automata-based programming">Automata-based</a> (<a href="/wiki/Action_language" title="Action language">Action</a>)</li> <li><a href="/wiki/Command_language" title="Command language">Command</a> (<a href="/wiki/Spacecraft_command_language" title="Spacecraft command language">Spacecraft</a>)</li> <li><a href="/wiki/Differentiable_programming" title="Differentiable programming">Differentiable</a></li> <li><a href="/wiki/End-user_development" title="End-user development">End-user</a></li> <li><a href="/wiki/Grammar-oriented_programming" title="Grammar-oriented programming">Grammar-oriented</a></li> <li><a href="/wiki/Interface_description_language" title="Interface description language">Interface description</a></li> <li><a href="/wiki/Language-oriented_programming" title="Language-oriented programming">Language-oriented</a></li> <li><a href="/wiki/List_comprehension" title="List comprehension">List comprehension</a></li> <li><a href="/wiki/Low-code_development_platform" title="Low-code development platform">Low-code</a></li> <li><a href="/wiki/Modeling_language" title="Modeling language">Modeling</a></li> <li><a href="/wiki/Natural-language_programming" title="Natural-language programming">Natural language</a></li> <li><a href="/wiki/Non-English-based_programming_languages" title="Non-English-based programming languages">Non-English-based</a></li> <li><a href="/wiki/Page_description_language" title="Page description language">Page description</a></li> <li><a href="/wiki/Pipeline_(software)" title="Pipeline (software)">Pipes</a> and <a href="/wiki/Filter_(software)" title="Filter (software)">filters</a></li> <li><a href="/wiki/Probabilistic_programming" title="Probabilistic programming">Probabilistic</a></li> <li><a href="/wiki/Quantum_programming" title="Quantum programming">Quantum</a></li> <li><a href="/wiki/Scientific_programming_language" title="Scientific programming language">Scientific</a></li> <li><a href="/wiki/Scripting_language" title="Scripting language">Scripting</a></li> <li><a href="/wiki/Set_theoretic_programming" title="Set theoretic programming">Set-theoretic</a></li> <li><a href="/wiki/Simulation_language" title="Simulation language">Simulation</a></li> <li><a href="/wiki/Stack-oriented_programming" title="Stack-oriented programming">Stack-based</a></li> <li><a href="/wiki/System_programming_language" title="System programming language">System</a></li> <li><a href="/wiki/Tactile_programming_language" title="Tactile programming language">Tactile</a></li> <li><a href="/wiki/Template_processor" title="Template processor">Templating</a></li> <li><a href="/wiki/Transformation_language" title="Transformation language">Transformation</a> (<a href="/wiki/Graph_rewriting" title="Graph rewriting">Graph rewriting</a>, <a href="/wiki/Production_system_(computer_science)" title="Production system (computer science)">Production</a>, <a href="/wiki/Pattern_matching" title="Pattern matching">Pattern</a>)</li> <li><a href="/wiki/Visual_programming_language" title="Visual programming language">Visual</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Concurrent_computing" title="Concurrent computing">Concurrent</a>,<br /><a href="/wiki/Distributed_computing" title="Distributed computing">distributed</a>,<br /><a href="/wiki/Parallel_computing" title="Parallel computing">parallel</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Actor_model" title="Actor model">Actor-based</a></li> <li><a href="/wiki/Automatic_mutual_exclusion" title="Automatic mutual exclusion">Automatic mutual exclusion</a></li> <li><a href="/wiki/Choreographic_programming" title="Choreographic programming">Choreographic programming</a></li> <li><a href="/wiki/Concurrent_logic_programming" title="Concurrent logic programming">Concurrent logic</a> (<a href="/wiki/Concurrent_constraint_logic_programming" title="Concurrent constraint logic programming">Concurrent constraint logic</a>)</li> <li><a href="/wiki/Concurrent_object-oriented_programming" title="Concurrent object-oriented programming">Concurrent OO</a></li> <li><a href="/wiki/Macroprogramming" title="Macroprogramming">Macroprogramming</a></li> <li><a href="/wiki/Multitier_programming" title="Multitier programming">Multitier programming</a></li> <li><a href="/wiki/Organic_computing" title="Organic computing">Organic computing</a></li> <li><a href="/wiki/Parallel_programming_model" title="Parallel programming model">Parallel programming models</a></li> <li><a href="/wiki/Partitioned_global_address_space" title="Partitioned global address space">Partitioned global address space</a></li> <li><a href="/wiki/Process-oriented_programming" title="Process-oriented programming">Process-oriented</a></li> <li><a href="/wiki/Relativistic_programming" title="Relativistic programming">Relativistic programming</a></li> <li><a href="/wiki/Service-oriented_programming" title="Service-oriented programming">Service-oriented</a></li> <li><a href="/wiki/Structured_concurrency" title="Structured concurrency">Structured concurrency</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Metaprogramming" title="Metaprogramming">Metaprogramming</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Attribute-oriented_programming" title="Attribute-oriented programming">Attribute-oriented</a></li> <li><a href="/wiki/Automatic_programming" title="Automatic programming">Automatic</a> (<a href="/wiki/Inductive_programming" title="Inductive programming">Inductive</a>)</li> <li><a href="/wiki/Dynamic_programming_language" title="Dynamic programming language">Dynamic</a></li> <li><a href="/wiki/Extensible_programming" title="Extensible programming">Extensible</a></li> <li><a href="/wiki/Generic_programming" title="Generic programming">Generic</a></li> <li><a href="/wiki/Homoiconicity" title="Homoiconicity">Homoiconicity</a></li> <li><a href="/wiki/Interactive_programming" title="Interactive programming">Interactive</a></li> <li><a class="mw-selflink selflink">Macro</a> (<a href="/wiki/Hygienic_macro" title="Hygienic macro">Hygienic</a>)</li> <li><a href="/wiki/Metalinguistic_abstraction" title="Metalinguistic abstraction">Metalinguistic abstraction</a></li> <li><a href="/wiki/Multi-stage_programming" title="Multi-stage programming">Multi-stage</a></li> <li><a href="/wiki/Program_synthesis" title="Program synthesis">Program synthesis</a> (<a href="/wiki/Bayesian_program_synthesis" title="Bayesian program synthesis">Bayesian</a>, <a href="/wiki/Inferential_programming" title="Inferential programming">Inferential</a>, <a href="/wiki/Programming_by_demonstration" title="Programming by demonstration">by demonstration</a>, <a href="/wiki/Programming_by_example" title="Programming by example">by example</a>)</li> <li><a href="/wiki/Reflective_programming" title="Reflective programming">Reflective</a></li> <li><a href="/wiki/Self-modifying_code" title="Self-modifying code">Self-modifying code</a></li> <li><a href="/wiki/Symbolic_programming" title="Symbolic programming">Symbolic</a></li> <li><a href="/wiki/Template_metaprogramming" title="Template metaprogramming">Template</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Separation_of_concerns" title="Separation of concerns">Separation<br />of concerns</a></th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Aspect-oriented_programming" title="Aspect-oriented programming">Aspects</a></li> <li><a href="/wiki/Component-based_software_engineering" title="Component-based software engineering">Components</a></li> <li><a href="/wiki/Data-driven_programming" title="Data-driven programming">Data-driven</a></li> <li><a href="/wiki/Data-oriented_design" title="Data-oriented design">Data-oriented</a></li> <li><a href="/wiki/Event-driven_programming" title="Event-driven programming">Event-driven</a></li> <li><a href="/wiki/Feature-oriented_programming" title="Feature-oriented programming">Features</a></li> <li><a href="/wiki/Intentional_programming" title="Intentional programming">Intentional</a></li> <li><a href="/wiki/Literate_programming" title="Literate programming">Literate</a></li> <li><a href="/wiki/Role-oriented_programming" title="Role-oriented programming">Roles</a></li> <li><a href="/wiki/Subject-oriented_programming" title="Subject-oriented programming">Subjects</a></li></ul> </div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"></div><div role="navigation" class="navbox" aria-labelledby="Types_of_programming_languages" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239400231"><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Types_of_programming_languages" title="Template:Types of programming languages"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Types_of_programming_languages" title="Template talk:Types of programming languages"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Types_of_programming_languages" title="Special:EditPage/Template:Types of programming languages"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Types_of_programming_languages" style="font-size:114%;margin:0 4em"><a href="/wiki/Programming_paradigm" title="Programming paradigm">Types of programming languages</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Level</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Machine_code" title="Machine code">Machine</a></li> <li><a href="/wiki/Assembly_language" title="Assembly language">Assembly</a></li> <li><a href="/wiki/Compiled_language" title="Compiled language">Compiled</a></li> <li><a href="/wiki/Interpreted_language" class="mw-redirect" title="Interpreted language">Interpreted</a></li></ul> <ul><li><a href="/wiki/Low-level_programming_language" title="Low-level programming language">Low-level</a></li> <li><a href="/wiki/High-level_programming_language" title="High-level programming language">High-level</a></li> <li><a href="/wiki/Very_high-level_programming_language" title="Very high-level programming language">Very high-level</a></li> <li><a href="/wiki/Esoteric_programming_language" title="Esoteric programming language">Esoteric</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Programming_language_generations" title="Programming language generations">Generation</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/First-generation_programming_language" title="First-generation programming language">First</a></li> <li><a href="/wiki/Second-generation_programming_language" title="Second-generation programming language">Second</a></li> <li><a href="/wiki/Third-generation_programming_language" title="Third-generation programming language">Third</a></li> <li><a href="/wiki/Fourth-generation_programming_language" title="Fourth-generation programming language">Fourth</a></li> <li><a href="/wiki/Fifth-generation_programming_language" title="Fifth-generation programming language">Fifth</a></li></ul> </div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"></div><div role="navigation" class="navbox authority-control" aria-label="Navbox" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Help:Authority_control" title="Help:Authority control">Authority control databases</a>: National <span class="mw-valign-text-top noprint" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q629579#identifiers" title="Edit this at Wikidata"><img alt="Edit this at Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4125810-1">Germany</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh85079429">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="http://olduli.nli.org.il/F/?func=find-b&amp;local_base=NLX10&amp;find_code=UID&amp;request=987007541030005171">Israel</a></span></li></ul></div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐6b7f745dd4‐r6k9d Cached time: 20241125142823 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.999 seconds Real time usage: 1.259 seconds Preprocessor visited node count: 3915/1000000 Post‐expand include size: 122401/2097152 bytes Template argument size: 3920/2097152 bytes Highest expansion depth: 12/100 Expensive parser function count: 14/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 134631/5000000 bytes Lua time usage: 0.660/10.000 seconds Lua memory usage: 20927642/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 1100.093 1 -total 33.27% 366.008 1 Template:Reflist 16.94% 186.352 5 Template:Annotated_link 12.88% 141.679 22 Template:Cite_web 12.78% 140.583 5 Template:Cite_journal 11.10% 122.118 1 Template:Short_description 9.73% 107.081 4 Template:Navbox 9.46% 104.052 1 Template:Programming_paradigms_navbox 7.42% 81.650 5 Template:Fix 4.89% 53.781 7 Template:Main_other --> <!-- Saved in parser cache with key enwiki:pcache:idhash:20560-0!canonical and timestamp 20241125142823 and revision id 1257555335. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Macro_(computer_science)&amp;oldid=1257555335">https://en.wikipedia.org/w/index.php?title=Macro_(computer_science)&amp;oldid=1257555335</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Programming_constructs" title="Category:Programming constructs">Programming constructs</a></li><li><a href="/wiki/Category:Source_code" title="Category:Source code">Source code</a></li><li><a href="/wiki/Category:Automation_software" title="Category:Automation software">Automation software</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_is_different_from_Wikidata" title="Category:Short description is different from Wikidata">Short description is different from Wikidata</a></li><li><a href="/wiki/Category:All_articles_with_unsourced_statements" title="Category:All articles with unsourced statements">All articles with unsourced statements</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_April_2022" title="Category:Articles with unsourced statements from April 2022">Articles with unsourced statements from April 2022</a></li><li><a href="/wiki/Category:Articles_needing_additional_references_from_September_2024" title="Category:Articles needing additional references from September 2024">Articles needing additional references from September 2024</a></li><li><a href="/wiki/Category:All_articles_needing_additional_references" title="Category:All articles needing additional references">All articles needing additional references</a></li><li><a href="/wiki/Category:Articles_needing_additional_references_from_June_2014" title="Category:Articles needing additional references from June 2014">Articles needing additional references from June 2014</a></li><li><a href="/wiki/Category:All_articles_with_failed_verification" title="Category:All articles with failed verification">All articles with failed verification</a></li><li><a href="/wiki/Category:Articles_with_failed_verification_from_February_2020" title="Category:Articles with failed verification from February 2020">Articles with failed verification from February 2020</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_February_2020" title="Category:Articles with unsourced statements from February 2020">Articles with unsourced statements from February 2020</a></li><li><a href="/wiki/Category:Pages_displaying_wikidata_descriptions_as_a_fallback_via_Module:Annotated_link" title="Category:Pages displaying wikidata descriptions as a fallback via Module:Annotated link">Pages displaying wikidata descriptions as a fallback via Module:Annotated link</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 15 November 2024, at 14:56<span class="anonymous-show">&#160;(UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Macro_(computer_science)&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.canary-78796dc7ff-sdgxv","wgBackendResponseTime":142,"wgPageParseReport":{"limitreport":{"cputime":"0.999","walltime":"1.259","ppvisitednodes":{"value":3915,"limit":1000000},"postexpandincludesize":{"value":122401,"limit":2097152},"templateargumentsize":{"value":3920,"limit":2097152},"expansiondepth":{"value":12,"limit":100},"expensivefunctioncount":{"value":14,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":134631,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 1100.093 1 -total"," 33.27% 366.008 1 Template:Reflist"," 16.94% 186.352 5 Template:Annotated_link"," 12.88% 141.679 22 Template:Cite_web"," 12.78% 140.583 5 Template:Cite_journal"," 11.10% 122.118 1 Template:Short_description"," 9.73% 107.081 4 Template:Navbox"," 9.46% 104.052 1 Template:Programming_paradigms_navbox"," 7.42% 81.650 5 Template:Fix"," 4.89% 53.781 7 Template:Main_other"]},"scribunto":{"limitreport-timeusage":{"value":"0.660","limit":"10.000"},"limitreport-memusage":{"value":20927642,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-6b7f745dd4-r6k9d","timestamp":"20241125142823","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Macro (computer science)","url":"https:\/\/en.wikipedia.org\/wiki\/Macro_(computer_science)","sameAs":"http:\/\/www.wikidata.org\/entity\/Q629579","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q629579","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2002-02-25T15:43:11Z","dateModified":"2024-11-15T14:56:55Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/8\/82\/Jedit_macro_recorder.png","headline":"preprocessing rule in computer languages that specifies how an input text usually identified by a definable keyword or sequence is mapped to a frequently larger output text"}</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10