Liste des Groupes | Revenir à cl c |
On 19/10/2024 17:03, David Brown wrote:I know there are compilers that don't support VLAs at all - that's fair enough (and that's why I specifically mentioned it). We can expect that compilers that can't handle VLAs at all will not support C23 constexpr, or any suggested C++ style extensions to the semantics of "const".On 19/10/2024 17:18, Thiago Adams wrote:I can give examples where a compiler won't work, or it will generate different code, but you won't execpt it because you won't recognise the compiler, or will dismiss it, or will dismiss even gcc because optimisations aren't used.Em 10/18/2024 8:54 PM, Keith Thompson escreveu:>Thiago Adams <thiago.adams@gmail.com> writes:>I think constexpr keyword is unnecessary.>
Sure, most language features are strictly unnecessary.
>Anything you do with it could/should be done with const.>
No, absolutely not.
>
If not, do you have a sample where, using "const" as "constexpr", would create problems?
>
The sample I know is VLA.
>
const int c = 2;
int a[c]; //a is VLA because c is not a constant expression.
>
>
But this is not enough to convince me because it is better not to be a VLA here.
>
What practical difference would it make? Can you think of any difference between local variables "a" and "b" defined like this?
>
enum { n = 2 };
const int c = n;
int a[c];
int b[n];
>
Can you show any situation where you could use "a" and not "b", or vice versa, or where the meaning would be different? Can you show any compiler that treats them differently in code generation (assuming a compiler that supports enough of C99 to allow it)?
>
I know of no differences there. That is enough to convince me that it doesn't matter in the slightest whether it is technically a VLA or not.
If it will always be gcc-O2 or higher, and it is an example just like these (so inside a function), then probably it will generate the same code.Not with -O1.
But that's a lot of 'if's.
Where the code is different, then gcc on Windows for example likes to generate a call to __chkstack() (to incrementally increase the stack a page at a time in case it skips a page for a large allocation).
Les messages affichés proviennent d'usenet.