Req #55835 [Opn->Csd]: char* field should be const char* to avoid C++ warning
| From: | nikic@php.net | Date: | Thu, 02 Nov 2017 20:58:07 +0000 |
| Subject: | Req #55835 [Opn->Csd]: char* field should be const char* to avoid C++ warning | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-212415@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=55835&edit=1
ID: 55835
Updated by: nikic@php.net
Reported by: olivier at yakaz dot com
Summary: char* field should be const char* to avoid C++
warning
-Status: Open
+Status: Closed
Type: Feature/Change Request
Package: Compile Warning
Operating System: All (seen under Linux)
PHP Version: 5.3.8
-Assigned To:
+Assigned To: nikic
Block user comment: N
Private report: N
New Comment:
Closing this as the fields are const char * as of PHP 7.0.
Previous Comments:
------------------------------------------------------------------------
[2011-10-03 07:56:49] olivier at yakaz dot com
Description:
------------
http://news.php.net/php.internals/55662
I'm writing a C++ extension to PHP.
When declaring a INI entry I get the following warning, multiple times:
warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
This only arises when compiling with a C++ compiler.
The right and easy fix seems to set some fields to const char *.
Some may even be set to const char * const (but this alternative seems
to be used
nowhere).
The proposed patch is against the php5-dev-5.3.8-2 package of debian sid:
PHP 5.3.8-2 with Suhosin-Patch (cli) (built: Sep 12 2011 07:28:26)
Test script:
---------------
Write a C++ extension:
config.m4 should contain PHP_REQUIRE_CXX().
Declare your module:
zend_module_entry quezako_module_entry = {
STANDARD_MODULE_HEADER,
"YourExtensionName", // (1 warning here)
[...],
"0.42", // (1 warning here)
[...],
STANDARD_MODULE_PROPERTIES_EX
};
Declare an INI entry:
PHP_INI_BEGIN()
STD_PHP_INI_ENTRY(
"extensionName.variable", // (1 warning here)
"default value", // (1 warning here)
[...]
)
PHP_INI_END()
Expected result:
----------------
No compilation warning.
Actual result:
--------------
Multiple of the following warning:
warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
Using the very common fix of prepending (char*) to the string constant is
especially harmful here, because of ZEND_INI_ENTRY3_EX using sizeof() on in: it
returns 4/8 (32/64bits platform).
Using a cast to char[] solves the problem, but the above fix is a very very
common mistake.
If the target fields were const char*, no compilation warning would be rose.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=55835&edit=1