"Bertel Brander" <bertel@post4.tele.dk> wrote in message
news:42375869$0$266$edfadb0f@dread12.news.tele.dk...
| Thorsten Ottosen wrote:
| > "Mads Jensen" <madsj@razptuzs.dk> wrote in message
| > news:4237368f$0$643$edfadb0f@dread16.news.tele.dk...
| > | Hej
| > |
| > | Det er vist mest et spørgsmål stillet af interesse, mere end fordi det
| > | skal bruges til noget.
| > |
| > | Efter at have læst i "The C Programming Language, 2nd edition" og læst,
| > | at en af fornyelser i C89 i forhold til den første udgave af C var
| > | "const" identifier'en, som angiveligvis gør det samme som #define ?
| >
| > ikke i C.
| >
| > du kan ikke bruge
| >
| > const int foo = 3;
| >
| > i
| > int array[foo];
| >
| > Genialt træk af C komiteen; Det bedste er at bruge enum { foo = 3 }; ved
| > integers.
|
| Det er lidt for let at sparke på et sprog der har mere end 15 år
| på bagen.
de kunne have ændret det i C99
| >
| > | Så nu er mit spørgsmål, kan #define ikke betegnes som forældet, eller er
| > | der nogle ting, som gør, at man ikke kan sætte en lave en global
| > | variabel med "const" ?
| >
| > se ovenfor.
| >
| > | Angående brugen af #define til at lave små makroer, så kan det vel
| > | undgåes ved at lave en inline funktion, hvis man kigger lidt i C99
| > | standarden.
| >
| > yes.
|
| Det kan være handy.
| Hvis jeg vil lave et debug interface hvor jeg kan skrive:
| DEBUG(MyGroup, "Enter: " << state() << " Peter: " << whatever->Peter);
|
| Og kunne få det til at kompilere til ingenting og kunne disable MyGroup
| unden at skulle streame inden jeg tester, må DEBUG være en macro.
hvis koden er "død" inden i en inline function, så skulle det også forsvinde.
| Men man bør forsøge at undgå macro'er hvis man kan og hvis det ikke
| koster for meget.
macroe bruges faktisk en del i moderne C++ biblioteker fordi
man faktisk kan lave iterationer mv. Men man bruger det at genere kode,
ikke så meget til at erstatte functions-kald.
Se
http://www.boost.org/libs/preprocessor/doc/index.html
for de mest langhårede macro hacks.
-Thorsten