Кіріспе
Аргументтердің санын өзгерте алатын макрос
Вариадикалық макрос – кейбір компьютерлік бағдарламалау тілдерінің, әсіресе C препроцессорының мүмкіндігі, оның арқасында макрос өзгермелі сандағы аргументтерді қабылдауға дайындығын білдіре алады. Өзгермелі аргументтерді қабылдайтын макростар 1999 жылы ISO/IEC 9899:1999 (C99) C тілі стандартының жаңа нұсқасында, ал 2011 жылы ISO/IEC 14882:2011 (C++11) C++ тілі стандартының жаңа нұсқасында енгізілді. Аргументтері жоқ вариадикалық макростарға қолдау C++20-да қосылды және C23-де қосылмақ. C99 және C++11 стандарттары кем дегенде бір аргумент талап етеді, бірақ C++20-дан бастап бұл шектеу функционалдық макрос арқылы жойылды. Макрос аргументтердің болған жағдайында олармен алмастырылады, әйтпесе жойылады. Көптеген компиляторлар осы жаңа мүмкіндік қосылғанға дейін нөлдік аргументтерді де қабылдауға рұқсат береді. C препроцессорының ережелері макрос атының аргументтер ішінде рекурсивті түрде кеңеюіне жол бермейді. Дегенмен, бұл шектеуді рекурсивті кеңейтулердің белгілі бір санына дейін айналып өтуге болады.
A variadic macro is a feature of some computer programming languages, especially the C preprocessor, whereby a macro may be declared to accept a varying number of arguments. Variable argument macros were introduced in 1999 in the ISO/IEC 9899:1999 (C99) revision of the C language standard, and in 2011 in ISO/IEC 14882:2011 (C++11) revision of the C++ language standard. Support for variadic macros with no arguments was added in C++20 and will be added in C23. Both the C99 and C++11 standards require at least one argument, but since C++20 this limitation has been lifted through the functional macro. The macro is replaced by its argument when arguments are present, and omitted otherwise. Common compilers also permit passing zero arguments before this addition, however. The C preprocessor rules prevent macro names in the argument of from expanding recursively. It is possible to work around this limitation up to an arbitrary fixed number of recursive expansions, however.
Қолдау
Бірнеше компилятор C және C++ кодтарын компиляциялау кезінде өзгермелі аргументтерді қабылдайтын макростарды қолдайды: GNU Compiler Collection 3.0, Visual Studio 2005, GCC сондай-ақ Objective C компиляциялау кезінде мұндай макростарды қолдайды.
GNU Compiler Collection 8, Clang 6 және Visual Studio 2019 нұсқаларында нөлдік аргументтерді қолдайтын макросқа қолдау қосылды.
Соңғы үтір
C99 стандартында өзгергіш макростар үшін бос аргументтермен соңғы үтірді жасауда үйлесімділік мәселесі бар. Кейбір компиляторлар (мысалы, Visual Studio жаңа стандартқа сәйкес препроцессорды қолданбағанда)