mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
<array_length.h>: New array_length and array_end macros
(cherry picked from commit c94a5688fb
)
This commit is contained in:
parent
5a2779f9bc
commit
bda48606ee
@ -1,3 +1,8 @@
|
||||
2017-11-02 Florian Weimer <fweimer@redhat.com>
|
||||
|
||||
Add array_length and array_end macros.
|
||||
* include/array_length.h: New file.
|
||||
|
||||
2017-10-27 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/i386/fpu/libm-test-ulps: Regenerated for GCC 7 with
|
||||
|
36
include/array_length.h
Normal file
36
include/array_length.h
Normal file
@ -0,0 +1,36 @@
|
||||
/* The array_length and array_end macros.
|
||||
Copyright (C) 2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _ARRAY_LENGTH_H
|
||||
#define _ARRAY_LENGTH_H
|
||||
|
||||
/* array_length (VAR) is the number of elements in the array VAR. VAR
|
||||
must evaluate to an array, not a pointer. */
|
||||
#define array_length(var) \
|
||||
__extension__ ({ \
|
||||
_Static_assert (!__builtin_types_compatible_p \
|
||||
(__typeof (var), __typeof (&(var)[0])), \
|
||||
"argument must be an array"); \
|
||||
sizeof (var) / sizeof ((var)[0]); \
|
||||
})
|
||||
|
||||
/* array_end (VAR) is a pointer one past the end of the array VAR.
|
||||
VAR must evaluate to an array, not a pointer. */
|
||||
#define array_end(var) (&(var)[array_length (var)])
|
||||
|
||||
#endif /* _ARRAY_LENGTH_H */
|
Loading…
Reference in New Issue
Block a user