Macros in C++

Patreon ► / thecherno
Twitter ► / thecherno
Instagram ► / thecherno
Discord ► thecherno.com/discord
Series Playlist ► thecherno.com/cpp
Thank you to the following Patreon supporters:
- Dominic Pace
- Kevin Gregory Agwaze
- Sébastien Bervoets
- Tobias Humig
- Peter Siegmund
- Kerem Demirer
Gear I use:
-----------------
BEST laptop for programming! ► geni.us/pakTES
My FAVOURITE keyboard for programming! ► geni.us/zNhB
FAVOURITE monitors for programming! ► geni.us/Ig6KBq
MAIN Camera ► geni.us/t6xyDRO
MAIN Lens ► geni.us/xGoDWT
Second Camera ► geni.us/CYUQ
Microphone ► geni.us/wqO6g7K

Пікірлер: 266

  • @karmaindustrie
    @karmaindustrie5 жыл бұрын

    #define print(x) std::cout

  • @IamusTheFox

    @IamusTheFox

    4 жыл бұрын

    Or with type safty, and proper compile time checking: template constexpr void print(Tostream ostrem = std::cout, Tlimit end=' ' ,TStr ... to_print) { (std:: cout

  • @kcvinu

    @kcvinu

    4 жыл бұрын

    #define begin { #define end } ; voilà ! pascal. And use just "end", voilà ! Ruby. :) cpp is really fun.

  • @ShadowaOsu

    @ShadowaOsu

    4 жыл бұрын

    @@IamusTheFox you defined a template Tostream and never used it lmao

  • @IamusTheFox

    @IamusTheFox

    4 жыл бұрын

    @@ShadowaOsu lmao, you're right, my bad.

  • @ShadowaOsu

    @ShadowaOsu

    4 жыл бұрын

    ​@@IamusTheFox also it gives compile error for various of inputs when used in main, so I tried to give it a try as well struct End { const char* end; constexpr End() : end(" ") { } constexpr End(const char* end) : end(end) { } }; template constexpr auto pyprint (const First& first, const Rest& ...rest) -> void { if constexpr (sizeof... (rest) > 0) { std::cout

  • @Banom7a
    @Banom7a6 жыл бұрын

    #define true false

  • @rj00a

    @rj00a

    6 жыл бұрын

    #define struct union

  • @OmarChida

    @OmarChida

    6 жыл бұрын

    #define double float

  • @sticky4loop227

    @sticky4loop227

    5 жыл бұрын

    #define break continue

  • @SamTanXYZ

    @SamTanXYZ

    5 жыл бұрын

    #define ( )

  • @user-fx5ik8tr9i

    @user-fx5ik8tr9i

    5 жыл бұрын

    #define ;

  • @nimrodhawk4011
    @nimrodhawk40113 жыл бұрын

    The thought of seeing an “OPEN_CURLY” macro in real life cracked me up...at that point you know you’re dealing with a high-effort troll lmao

  • @sebastiangudino9377

    @sebastiangudino9377

    2 жыл бұрын

    I once saw a #define begin { #define end } And it was honestly a pretty wild experience. That simple change made C++ feel a hell of a lot like Ruby or Basic. Like: void main() begin if (1 > 0) begin printf("whatever "); end end Doesn't that look wild?

  • @failgun

    @failgun

    2 жыл бұрын

    @@sebastiangudino9377 reminds me of Lua too

  • @zltn_brkl

    @zltn_brkl

    2 жыл бұрын

    #define semicolan ;

  • @jstro-hobbytech

    @jstro-hobbytech

    Жыл бұрын

    My wife was like "what are you laughing so hard at?". I told her she wouldn't understand. She made me explain. She didn't understand.

  • @phantomstriker7996

    @phantomstriker7996

    Жыл бұрын

    Saw one image where he just defined some stuff and the code was like "frfr no cap" and he just replaces so many things with just random words and it looks like a sentence.

  • @DiamondShocked
    @DiamondShocked3 жыл бұрын

    I think it would also be helpful to show common pitfalls of parameterized macros, such as the following 2 examples: =================== #define MAX(x, y) x > y ? x : y int main() { return MAX(7,5) * 10; } Here main() will return 7 instead of 70: 7 > 5 ? 7 : 5 * 10 ==> 7 To fix this, do: #define MAX(x, y) (x > y ? x : y) =================== Another issue can be seen in this example: #define MULT(x, y) (x * y) int main() { return MULT(2+5, 10); } Here main() will return 52 instead of 70: 2+5*10 ==> 52 To fix this, do: #define MULT(x,y) ((x) * (y)) Of course, y can be a pointer so it is possible that *(y) is seen as a dereference. In addition, either x or y can be almost any text which can result in weird generated code. =================== The takeaway is that parameterized macros are NOT functions: they simply replace symbols with parameterized text. This can also result in the problem of massive code duplication, since a parameterized macro does not define a function in the program text segment, but is rather copied to every invocation.

  • @johnsmith-ci5ib
    @johnsmith-ci5ib3 жыл бұрын

    These have got to be the most concise and clear programming videos I've seen thus far.

  • @hallerinstruments318
    @hallerinstruments3184 жыл бұрын

    You're an excellent educator. Great job! This was super helpful.

  • @psposki
    @psposki4 жыл бұрын

    It's so comfy to watch it, I wish my lecturer was talking and makeing examples like you.

  • @redcollard3586
    @redcollard3586 Жыл бұрын

    Thanks for these videos man, I'm reading "Code Complete" and I thought I was getting to know C++ and C pretty well but everything he says about macros has gone over my head. This clears everything up, as so many of your videos do. The Static and Cost ones are my other favorites so far can't wait to see the rest this series is literally better than a college education.

  • @zaviermiller8980
    @zaviermiller89802 жыл бұрын

    Bruh I love that I can expect a good ass cherno video on any cop topic I might want to learn. Really appreciate the work man 🙌🙌🙌

  • @likestomeasurestuff3554
    @likestomeasurestuff35546 жыл бұрын

    Thank for this series, helps a lot

  • @maryambeygmohammadi2232
    @maryambeygmohammadi22322 жыл бұрын

    good explained and helpful, thanks Cherno!

  • @VasaMusic438
    @VasaMusic4385 жыл бұрын

    your indications are very wise, thanks a lot !!

  • @kiritsuna
    @kiritsuna4 жыл бұрын

    This video really helped me understand a lesson of learncpp, thanks a lot

  • @10monthspregnant
    @10monthspregnant6 жыл бұрын

    Really loved the optimization of std::vector video. More videos on optimizing commonly libraries and functions would be super useful!

  • @alltheway99

    @alltheway99

    4 жыл бұрын

    Or STL container comparisons and algorithms 🙂

  • @DanielLiljeberg
    @DanielLiljeberg6 жыл бұрын

    As some might have noticed the "blank" macro would actually not remove the entire LOG line in the code. It would leave the ";". This might cause people to want to include the ";" in the macro instead of writing it after the macro in the source code since that would not leave a line with just a ";". But a line with only ";" is totally acceptable and is just an empty statement which a decent compiler would most likley simply discard although there might exist some compilers that would actually insert NOOP instructions. Point is, ";" by itself on a line is perfectly legal code.

  • @nathannlatimore7863

    @nathannlatimore7863

    3 жыл бұрын

    Thanks for the clarification! Really appreciate it!

  • @logangraham2956

    @logangraham2956

    3 жыл бұрын

    but you might want to be aware of this if it isn't by itself.

  • @robertmoats1890

    @robertmoats1890

    2 жыл бұрын

    Its sometimes better to define the empty output as "{}" or "((void)0)" - These will make it a valid line of code without it doing anything. This is important if your macro can be called from within a single condition line, like if(x) MACRO();

  • @Laevatei1nn

    @Laevatei1nn

    2 жыл бұрын

    called null statement

  • @kushalghosh5150

    @kushalghosh5150

    10 ай бұрын

    it is good to be aware of this but it doesn't matter if there is an extra colon ; after a statement

  • @billbez7465
    @billbez74654 жыл бұрын

    Excellent C++ series. I am now a patreon.

  • @gwennigboudeau7512
    @gwennigboudeau75124 жыл бұрын

    Very good video and clear explanation

  • @neiltsakatsa
    @neiltsakatsa6 жыл бұрын

    Streams, Input and Output. As well as Files

  • @firerazzer
    @firerazzer3 ай бұрын

    Really usefull compiler option : -E It wills just process the precompiler routine and output your source code with all macro expanded. For example : g++ -E main.cpp -o main.e

  • @sanskar_choudhary
    @sanskar_choudhary2 жыл бұрын

    Nice explaination 👍🏻

  • @Danny-ck6iw
    @Danny-ck6iw2 жыл бұрын

    This is te best explanation for this that I have seen on this flawed website known as KZread, thank you

  • @kaydenstevens5193
    @kaydenstevens51934 жыл бұрын

    The advice at 3:20 is golden bro!

  • @Mario112352
    @Mario1123526 жыл бұрын

    Really like your C++ series. Wondering if you could do some videos on MVS Windows GUI. Not much out there on the Windows GUI, I know there are at least one error with MVS 17 in loading a Windows GUI setup. This is really tough for beginners. Thanks,

  • @syeduthman
    @syeduthman5 жыл бұрын

    I use macros for Embedded microcontroller to configure my hardware easily.

  • @darealshinji
    @darealshinji2 жыл бұрын

    Other real life examples for macros would be to target different platforms. You write a conditional to decide between using Windows API or POSIX API. Or you want to do different stuff for an ARM build compared to x86. In open source projects macros are often used for optional features which might be enabled during configuration, like building ffmpeg with lots of optional third party libraries enabled. You can use macros to enable compiler specific stuff, like telling msvc right in the code to link against a library, but you want that part to be "excluded" for other compilers that don't understand or need this. Macros may also play a role when you build static libraries and DLLs for Windows, as the symbols in a header file need to be declared as either importing or exporting code or none of that.

  • @OzieCargile
    @OzieCargile3 жыл бұрын

    You are an excellent teacher.

  • @koenderbb5191
    @koenderbb51914 жыл бұрын

    Hi Cherno, I know you will touch / have touched upon macros in more depth in your game engine / opengl series, but could you still make a separate video that's purely about macros (a part 2 of this one)? Because I don't follow your game engine / opengl series but I would still like to learn more about it from you. Thanks ~

  • @ZzBiazZ
    @ZzBiazZ6 жыл бұрын

    thank you

  • @ogox
    @ogox6 жыл бұрын

    Hey, great videos! Can you please make a video about the volatile keyword? :)

  • @Fronzel.Neekburm
    @Fronzel.Neekburm2 жыл бұрын

    Great series, these are presented really well. I don't understand why "#ifdef symbol" or "#ifndef symbol" is bad though. Header files have used this method to see if it has already been included for ages, windows header use it a lot and use it to set function names for Unicode or ascii. Would have been a good time to explain the underscore in symbol names. Still great simple video series worth watching.

  • @sleshamishra4870
    @sleshamishra48703 жыл бұрын

    I am learning SOOOO much more than what i did i uni!

  • @PeterPetrakis
    @PeterPetrakis6 жыл бұрын

    Your example of logging bytes would be better served by creating a custom allocator that handled the metrics. Then you would override new to use your allocate/create functions. The bonus here is that you could add that allocator to a container and reap the same benefits.

  • @TheCherno

    @TheCherno

    6 жыл бұрын

    Yes, but you still might want to track the file and line the allocation came from, which would require a macro.

  • @ZER02641988
    @ZER026419886 жыл бұрын

    When we can expect the video in which you are going to show macros in more details and built in macro types , mentioned in this video?

  • @MegaNightdude
    @MegaNightdude3 жыл бұрын

    Awesome!

  • @AssemblyWizard
    @AssemblyWizard6 жыл бұрын

    Another problem with the code is that LOG in release mode doesn't force a semicolon.

  • @djupstaten2328
    @djupstaten2328 Жыл бұрын

    Thank you for these incredible videos. I noticed in VS Code, some C++ I had installed offered a -- *lightbulb* | "inline macro?" | -- clickable tooltip that will let you graphically resolve whatever macro you are currently hovering over. Surely there are tools in actual Visual Studio to do that globally? Or stepwise for safety.

  • @bluescanfly1981
    @bluescanfly19812 жыл бұрын

    Macros are useful for writing parametrized test cases or "procedurally generated" code in general. Clojure / Lisp take it to the next level with homoiconicity (code and data are the same thing)

  • @chainonsmanquants1630
    @chainonsmanquants16303 жыл бұрын

    Thanks

  • @robertmoats1890
    @robertmoats18902 жыл бұрын

    In some cases, you may want to define your empty macro (the release version) as "{}" or "((void)0)", such as.. #define MACRO(x) ((void)0) This will result in the macro generating a valid line of code that doesn't actually do anything. This would be important, if for example, you wanted to use it in places such as.. if( xyz ) MACRO(x); I usually define a special "#define EMPTY_STATEMENT ((void)0)" somewhere near the top of my code to be used in these cases. It makes the macros themselves a little more readable ( #define MACRO(x) EMPTY_STATEMENT )

  • @behrampatel3563
    @behrampatel35632 жыл бұрын

    You would have made an excellent Unreal Engine C++ trainer. Please do consider making a course on UE C++

  • @logangraham2956
    @logangraham29563 жыл бұрын

    actually the LOG(...); in release mode would become ; because the semicolon was not defined in the macro.

  • @scullyy
    @scullyyАй бұрын

    It no longer becomes simple copy paste when using any punctuation characters in the macro name. This code here for example, is not allowed: #define print(x) std::cout

  • @zdenkobrazda4041
    @zdenkobrazda40414 жыл бұрын

    ILOVETHIS

  • @mattgraves3709
    @mattgraves37093 жыл бұрын

    Awesome.

  • @RoshanPradhan2
    @RoshanPradhan23 жыл бұрын

    Let's make Python with #define 😂

  • @marcinlesniewski4571
    @marcinlesniewski45713 жыл бұрын

    Elegancko

  • @10monthspregnant
    @10monthspregnant6 жыл бұрын

    With the knowledge we have now, does anyone have any recommendations for medium sized C++ projects? Maybe making use of OpenCV?

  • 6 жыл бұрын

    very good. can you train qt. so we can make mobile application without lost of change of our code. Qt has opengl, opengl-es(angle) and vulkan implementations

  • @rcookie5128
    @rcookie51286 жыл бұрын

    yay!

  • @jadespy399
    @jadespy3992 жыл бұрын

    Another reason why it might not be the best -- although IMO it's silly -- is that someone might tack a

  • @henrikschou3789
    @henrikschou37896 жыл бұрын

    Many a video about APIs I here about them all the time. I wood like to know: Wot they are and how they works?

  • @nickmichael7206
    @nickmichael72066 жыл бұрын

    Would using the # define WAIT std::cin.get() still be bad for debugging purposes? If I am not using vim or some text editor that doesn't have break points, that looks like a pretty quick way to use my own sort of break point, especially if I am going to delete it after I am done writing the code anyway.

  • @CheckmateStallioN
    @CheckmateStallioN3 жыл бұрын

    Wouldn't it be usually better to use inline functions instead? They are safer and the performance difference is negligible. I know function calls use more cpu cycles but from my understanding inline functions are very optimized. I remember this from Effective C++ book

  • @LoneDWispOfficial
    @LoneDWispOfficial2 жыл бұрын

    video idea for anyone just for fun: Making c++ looks like another programming language, using only MACROS!

  • @jannesopanen8032
    @jannesopanen80323 жыл бұрын

    Good tutorial but if you use #define LOG(x), without anything, it compiles and works fine but the error code i get is weird? not 0 or 1.

  • @Rakesh-yu1pb
    @Rakesh-yu1pb4 жыл бұрын

    what an intelligent human being.

  • @aaamos16
    @aaamos16 Жыл бұрын

    Why can't you put template functions in.cpp files

  • @muhamadabdulsamad2815
    @muhamadabdulsamad28156 жыл бұрын

    Hey Cherno, thanks for your wonderful lectures they're really awesome and they helped me a lot! But the only tiny problem is in your lessons when you going through the lessons you speak and explain so fast lol so I'm asking if you just could be a bit slower for sharing knowledge about c++ I'll be grateful Thanks for everything ~ 😁

  • @b0606089

    @b0606089

    4 жыл бұрын

    Reduce the playback speed to 0.75x.

  • @hsmhsm327
    @hsmhsm3272 жыл бұрын

    Java: *public static void main* is untouchable if you want your code to compile. c++: hold my *MAIN_MARCO CHAR_EXCLAMATION*

  • @kcvinu
    @kcvinu4 жыл бұрын

    You are really great. I started learning cpp in 2013 but quit learning only because of curly brackets and over use of symbols like "

  • @piechulla1966

    @piechulla1966

    4 жыл бұрын

    This joke has probably been cracked over 100000 times since Kernighan & Ritchie presented C in 1971.

  • @mba2ceo
    @mba2ceo Жыл бұрын

    is there a way to refer an array element by a name ? ex: #define a1 a[1]; a1=1; ?

  • @haos4574
    @haos45746 жыл бұрын

    Function pointers needed

  • @astaghfirullahalzimastaghf3648
    @astaghfirullahalzimastaghf36483 жыл бұрын

    @3:02 Damn, That was useful Because I don't like to type "std::cout

  • @darealshinji

    @darealshinji

    2 жыл бұрын

    Often I just use printf.

  • @coolkoala282
    @coolkoala2824 жыл бұрын

    Both Programming and English can be learned by watching your videos

  • @kvanctok9234
    @kvanctok92342 жыл бұрын

    The Cherno: C++ Subtitles/CC: *zip ocelots*

  • @ccpmustfall6445
    @ccpmustfall64453 жыл бұрын

    For people having issues for ifdef DEBUG not showing correctly. Use #Ifdef _DEBUG I think the visual studio 2019 changed something for the debug :)

  • @YXalr
    @YXalr6 жыл бұрын

    Wouldn't #define LOG(x) leave an extra semicolon in the code as it is not part of the definition?

  • @rcookie5128

    @rcookie5128

    6 жыл бұрын

    yes it would in his example, but just a semicolon without any statements doesn't do anything

  • @TheDa6781
    @TheDa67813 жыл бұрын

    OMG thank you.This is exactly what i was looking for. OPEN_CURLY it is. No.. WAIT

  • @relytheone853
    @relytheone8537 ай бұрын

    Where should I move on after finishing these series?

  • @relytheone853
    @relytheone8537 ай бұрын

    Can I set debug mode in Linux using vscode?

  • @Daninshit
    @Daninshit3 жыл бұрын

    Define macros are easy, the difficult is to read, most of the time you don't know where they are and what they do. Some code depend of some macros to be defined and the docs sometimes don't put so much effort in explain it, and that's really confusing.

  • @bloodwolf8307
    @bloodwolf83074 жыл бұрын

    cool

  • @shipweck6253
    @shipweck62539 ай бұрын

    3:33 OOP programmers: nah im gonna make everything OOP

  • @sida_g567
    @sida_g5672 жыл бұрын

    Wow

  • @DainYanuka
    @DainYanuka5 жыл бұрын

    Does usage of macros effect performance or increase time in compilation since it needs to replace texts, like specially if the program has large number of macros?

  • @angelcaru

    @angelcaru

    3 жыл бұрын

    If you have a large number of macros, you should probably reconsider your code.

  • @BukanChurchill

    @BukanChurchill

    2 жыл бұрын

    @@angelcaru or your programming career

  • @Symphonixz
    @Symphonixz2 жыл бұрын

    this is cool and all, but wouldn't this require wrapping a good portion of code with "LOG(x)" or are you just using Macros for short code to become shorter? Excuse me for being dumb here, but could you give me another example where you could use Macros to do "stuff" as it is currently shown to put shorter code instead of typing the larger amount. I do find it interesting where you showed in "Release Mode" some code can be used or not used.

  • @abhijeetjain04
    @abhijeetjain045 жыл бұрын

    #DontstopOPENGLseries , lot of things are still to be covered in there !!!

  • @senatorpoopypants7182
    @senatorpoopypants71823 жыл бұрын

    why is this so funny to me. I need to grow up and get my big boy coder pants.

  • @bunty9560
    @bunty95604 жыл бұрын

    @Cherno What Should I start first, 'Game Engine' playlist or 'OpenGL' ?

  • @koenderbb5191

    @koenderbb5191

    4 жыл бұрын

    I haven't seen either, but I guess it would make more sense to start with OpenGL

  • @kinglijah9723
    @kinglijah97235 жыл бұрын

    On that first code you wrote, there wasn't a "return 0;" so when do I use the Return 0;

  • @IamusTheFox

    @IamusTheFox

    4 жыл бұрын

    @Peterolen You can even go crazy and have `void main();` Not that you should, ever. Seriously, don't.

  • @darealshinji

    @darealshinji

    2 жыл бұрын

    I don't like that he keeps omitting the return statement in main. I guess msvc silently optimizes it to return 0 or something like that. GCC will usually warn you and using "void main()" might not even be possible.

  • @Cyraxx13
    @Cyraxx136 жыл бұрын

    Please don't pull another "Cherno" on us. Like you hype us with your quality content and then suddenly dissapear for half a year... :(

  • @user-bk8rp9zj6q
    @user-bk8rp9zj6q Жыл бұрын

    Slack in Unreal Engine uses macroses extensively and code becomes so cryptic...

  • @eotcoldhymns2930
    @eotcoldhymns29304 жыл бұрын

    What IDE are you using or do you recommend for C/C++ development on linux?

  • @xrafter

    @xrafter

    3 жыл бұрын

    @Artem Katerynych Clion is available in linux

  • @chiragsingla.

    @chiragsingla.

    2 жыл бұрын

    I don't use ide I use visual studio code with c++ extension and cmake extensions

  • @kenan2386
    @kenan23862 жыл бұрын

    /* use this at your own risk */ #define true false #define int #define if while #define else we do a large amount of trolling

  • @RootsterAnon
    @RootsterAnon3 жыл бұрын

    if Anyone is watching this in 2020. If your Debug Code is not recognized after checking for PR_DEBUG you just need _DEBUG now. Hope this helps.

  • @Ali2010247
    @Ali20102476 жыл бұрын

    Typedefs?

  • @YamamotoGenryusaiShigekuni
    @YamamotoGenryusaiShigekuni Жыл бұрын

    I have a question. Can we redefine a preprocessor directive? For instance (#define ADD_LIB #include)

  • @MaxCE

    @MaxCE

    7 ай бұрын

    it doesn't work for normall defines

  • @MaxCE

    @MaxCE

    7 ай бұрын

    as for macros it doesn't work because # has a special meaning in macros

  • @milan_shah
    @milan_shah3 жыл бұрын

    This video was quite helpful. Could you please make a similar video but using VSCode? Thank you in advance!

  • @rogerbreton6412
    @rogerbreton64123 жыл бұрын

    Do you do any consulting?

  • @slaincow4032
    @slaincow40326 жыл бұрын

    *missed a lot of episodes* time to bing 😂

  • @slaincow4032

    @slaincow4032

    6 жыл бұрын

    *Calculates minutes in all episodes combined* 10 HOURS?

  • @user-rr8hc8ls5n
    @user-rr8hc8ls5n2 жыл бұрын

    So you can create lua with macros, end is }, and so on

  • @MichaelYoussry
    @MichaelYoussry6 жыл бұрын

    How is that different from inlined functions?

  • @TheCherno

    @TheCherno

    6 жыл бұрын

    Macros have nothing to do with functions, they're just text that is replaced. You could use them like a function, however you can do so much more with them. We'll explore this in later episodes.

  • @TheCherno

    @TheCherno

    6 жыл бұрын

    Functions will get inlined if you use the appropriate keyword (eg. __force_inline for MSVC).

  • @somedude4122

    @somedude4122

    6 жыл бұрын

    @TheChernoProject The code it will create tends to be the same though.

  • @courier7049

    @courier7049

    6 жыл бұрын

    The fact that an "inline" function is inlined is decided by compiler, macros do not care about type safety or code syntax as they are parsed at preprocessing phase and are simple "find/replace" expressions. The most fun is to debug a macro because if for an inline function debugger will jump into function in case of a macro there is no code to jump to as the name of the macro was already replaced with specific text.

  • @somedude4122

    @somedude4122

    6 жыл бұрын

    Well, yes, but macros are really useful where such text replacement is needed.

  • @kennnnn
    @kennnnn Жыл бұрын

    #define ever ;; for(ever)...

  • @higuy55100
    @higuy551006 жыл бұрын

    2:24 Double negative : "nothing you can't not replace" = "nothing you can replace"

  • @RealityCheck6969
    @RealityCheck69696 ай бұрын

    They should have used an assignment operator. People would understand instantly.

  • @dognip
    @dognip3 жыл бұрын

    3:50 you're welcome

  • @MaxCoplan
    @MaxCoplan4 жыл бұрын

    Why does he build for x86 and win32?

  • @piechulla1966

    @piechulla1966

    4 жыл бұрын

    Google WOW64 or watch all TheCherno clips. Imagine a customer who still wants to run your application on 32 bit windows. Imagine the effort to maintain two versions of your application. You understand?

  • @19n05k83
    @19n05k834 жыл бұрын

    Nordic nRF SDK for their microcontrollers is completely written in macros (C not C++). It's a nightmare.

  • @darealshinji

    @darealshinji

    2 жыл бұрын

    I've once seen a tiny single header file PNG decoder which was written almost entirely using macros. It was... interesting.

  • @huyvole9724
    @huyvole97246 жыл бұрын

    Now I realize Properties >> C/C++ >> Preprocess Def is macro. I remember when I used static/dynamic library, I into Properties >> Linker blah blah ... hahahahahah Now I confident to use macro #pragma comment(lib, "nameLib.lib")

  • @theeternallyvigilant5855
    @theeternallyvigilant58552 жыл бұрын

    Macros are Cs way to obfuscate code. C++ has the much more advanced techniques like templates.