Liste des Groupes | Revenir à cl c |
On 2025-04-21, bart <bc@freeuk.com> wrote:Characters, lines or files of source code, or bytes of binary?On 21/04/2025 19:43, Kaz Kylheku wrote:Several 100K to millions.On 2025-04-21, bart <bc@freeuk.com> wrote:>On 21/04/2025 04:16, Kaz Kylheku wrote:>- Because they are not gathered in one place, not only is it less>readable, but we cannot use while write a macro such as:>>
for_sqlite_hash (p, &pSchema->trigHash) {
if (some_condition_over(p))
continue; // doesn't stupidly repeat for the same p!
}
I can't write such macros at all. I'm not even sure what this does.
Have you never worked with a large codebase written by someone other
than you?
How large are we talking about?
I've seen a 33KB C file that expanded to 4MB after preprocessing. Macros are evil.I've delved into largish apps in the context of getting my C compilerWell, that brutal experience is the job of the career software engineer,
working. I would describe that experience as 'brutal'.
believe it or not. Very few work only on their own original code.
If you need toNo, they aren't. They are just another definition to understand.
debug someone else's codebase, not to find bugs in that program, but to
find why your implementation is failing, then you want as conservative a
coding style as possible.
>
>When you open a random file in an unfamiliar code base, pretty>
much any function call that is not in the standard library triggers
the "I don't know what this does" response.
Yes, a function call. Macros are in an entirely different, evil category.
They can be misused, and also used to make solutions that are moreYou can tell when there is abuse going on, because you find that instead of optimising doubling the speed of a program, it will make it 3-4 times as fast. Because layers of macros hide the fact that that there are also multiple layers of functions which need serious inlining.
complicated than some great ideas that don't involve macros.
So can anything: an open coded function can be misused to make some
complicated solution that can be more nicely done with macros.
The Lua sources (only a mere 30Kloc), use macros extensively, but alsoSo does ISO C; e.g. assert (expr); offsetof (type, member). So what?
have a habit of giving them ordinary looking names in lower case so that
they look like function calls.
Macros that provide syntax should blend into the language.These didn't provide syntax.
This sounds a very specific type of macro, just to replace a simple loop. And it is simple; those identifiers make it look scary. This is the loop:Please humour me: What Does It Do?It is intended to condense an interation that *you* open-coded, in this
example upthread:
p = sqliteHashFirst(&pSchema->trigHash);
while (p != NULL)
{
sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p));
p = sqliteHashNext(p) )
}
So although I didn't show the definition, I think, of course the intent that it
does this (i.e. is relevant to the discussion thread) and not something else.
for_sqlite_hash (p, hashptr) stmet
must initialize p using sqliteHashFirst(hashPtr);
If I had to write 17 loops over SQLite hashes, I'd rather typeI guess that answers that question! I'd use macros only as a last resort; you would use them at the first opportunity.
for_sqlite_hash(p, hash) than
for (p = sqliteHashFirst(hash); p; p = sqliteHashNext(hash)).
Les messages affichés proviennent d'usenet.