数据类型定义:
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);