数据类型定义:
typedef struct _zval_struct zval; typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; } zvalue_value; struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount__gc; zend_uchar type; /* active type */ zend_uchar is_ref__gc; }; typedef struct _zend_object_handlers zend_object_handlers; typedef struct _zend_object_value { zend_object_handle handle; const zend_object_handlers *handlers; } zend_object_value; typedef HashTable *(*zend_object_get_properties_t)(zval *object TSRMLS_DC); struct _zend_object_handlers { ... ... zend_object_get_properties_t get_properties; ... ... };
自己写的代码:
int fn_name(zval *object){ const zend_object_handlers *handlers = object.value.obj.handlers; handlers->get_properties(handlers TSRMLS_CC); }
按道理,在编译时,上述代码中,get_properties 的参数 handlers 是错误的,因为他的数据类型时 zend_object_handlers,而所需参数的正确类型应该 zval,
但是在 Visual Studio 2012 中编译时,竟然没有报错,只有一个警告:“函数”: 不同的“const”限定符
这是为啥呢?
你用的什么编译器?
VisualStudio2012a一看是php。没有错误。 object.value.obj.handlers
VS2012是IDE,不是编译器。
哈。。。。都是指针,无非指针指向的空间类型不同。你尝试这样的处理,看是个warning还是个error。
inttest(int*p){...}....constchar*ccp=...;test(ccp);版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。