PIPS
|
Go to the source code of this file.
Macros | |
#define | _GL_WARN_ON_USE(function, message) _GL_WARN_EXTERN_C int _gl_warn_on_use |
A C macro for emitting warnings if a function is used. More... | |
#define | _GL_WARN_ON_USE_CXX(function, rettype, parameters_and_attributes, msg) _GL_WARN_EXTERN_C int _gl_warn_on_use |
_GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") is like _GL_WARN_ON_USE (function, "string"), except that the function is declared with the given prototype, consisting of return type, parameters, and attributes. More... | |
#define | _GL_WARN_EXTERN_C extern |
_GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. More... | |
#define _GL_WARN_EXTERN_C extern |
_GL_WARN_EXTERN_C declaration; performs the declaration with C linkage.
Definition at line 107 of file warn-on-use.h.
#define _GL_WARN_ON_USE | ( | function, | |
message | |||
) | _GL_WARN_EXTERN_C int _gl_warn_on_use |
A C macro for emitting warnings if a function is used.
Copyright (C) 2010-2014 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
_GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration.
This macro is useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads.
For an example, it is possible to poison 'getline' by:
It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): if HAVE_RAW_DECL_ENVIRON static char ***rpl_environ (void) { return } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
#endif Unsupported.
Definition at line 75 of file warn-on-use.h.
#define _GL_WARN_ON_USE_CXX | ( | function, | |
rettype, | |||
parameters_and_attributes, | |||
msg | |||
) | _GL_WARN_EXTERN_C int _gl_warn_on_use |
_GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") is like _GL_WARN_ON_USE (function, "string"), except that the function is declared with the given prototype, consisting of return type, parameters, and attributes.
This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case.
Unsupported.
Definition at line 96 of file warn-on-use.h.