
There is no reason to expect this tool to be limited to C++11, it seems very likely to be of on-going interest. It seems likely to be useful for modernizing even as new libraries come out in TSes and other formats than a complete standard. Fundamentally, we need something a bit more general. After some discussion on the list, going with 'clang-modernize'. I've tried to do a reasonably comprehensive job of fixing up the names, but I may still have missed some. Feel free to poke me if you spot any fallout here. Things I've tried reasonably hard to find and fix: - cpp11-migrate -> clang-modernize - Migrator -> Modernizer - Clean up the introductory documentation that was C++11 specific. I'll also point out that this tool continues to delight me. =] Also, a huge thanks to those who have so carefully, thoroughly documented the tool. The docs here are simply phenomenal. Every tool should be this well documented. I hope I have updated the documentation reasonably well, but I'm not very good at documentation, so review much appreciated. llvm-svn: 189960
83 lines
1.4 KiB
ReStructuredText
83 lines
1.4 KiB
ReStructuredText
.. index:: Use-Nullptr Transform
|
|
|
|
=====================
|
|
Use-Nullptr Transform
|
|
=====================
|
|
|
|
The Use-Nullptr Transform is a transformation to convert the usage of null
|
|
pointer constants (eg. ``NULL``, ``0``) to use the new C++11 ``nullptr``
|
|
keyword. The transform is enabled with the :option:`-use-nullptr` option of
|
|
:program:`clang-modernize`.
|
|
|
|
Example
|
|
=======
|
|
|
|
.. code-block:: c++
|
|
|
|
void assignment() {
|
|
char *a = NULL;
|
|
char *b = 0;
|
|
char c = 0;
|
|
}
|
|
|
|
int *ret_ptr() {
|
|
return 0;
|
|
}
|
|
|
|
|
|
transforms to:
|
|
|
|
.. code-block:: c++
|
|
|
|
void assignment() {
|
|
char *a = nullptr;
|
|
char *b = nullptr;
|
|
char c = 0;
|
|
}
|
|
|
|
int *ret_ptr() {
|
|
return nullptr;
|
|
}
|
|
|
|
|
|
User defined macros
|
|
===================
|
|
|
|
By default this transform will only replace the ``NULL`` macro and will skip any
|
|
user-defined macros that behaves like ``NULL``. The user can use the
|
|
:option:`-user-null-macros` option to specify a comma-separated list of macro
|
|
names that will be transformed along with ``NULL``.
|
|
|
|
Example
|
|
-------
|
|
|
|
.. code-block:: c++
|
|
|
|
#define MY_NULL (void*)0
|
|
void assignment() {
|
|
void *p = MY_NULL;
|
|
}
|
|
|
|
|
|
using the command-line
|
|
|
|
.. code-block:: bash
|
|
|
|
clang-modernize -use-nullptr -user-null-macros=MY_NULL foo.cpp
|
|
|
|
|
|
transforms to:
|
|
|
|
.. code-block:: c++
|
|
|
|
#define MY_NULL NULL
|
|
void assignment() {
|
|
int *p = nullptr;
|
|
}
|
|
|
|
|
|
Risk
|
|
====
|
|
|
|
:option:`-risk` has no effect in this transform.
|