开发者社区> 问答> 正文

C语言在 Visual Studio 2012 中编译遇到的一个诡异问题?报错

数据类型定义:

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”限定符


这是为啥呢?

展开
收起
爱吃鱼的程序员 2020-06-20 19:25:06 557 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你用的什么编译器?

    VisualStudio2012a

    一看是php。没有错误。 object.value.obj.handlers

    VS2012是IDE,不是编译器。

    哈。。。。都是指针,无非指针指向的空间类型不同。你尝试这样的处理,看是个warning还是个error。

    inttest(int*p){...}....constchar*ccp=...;test(ccp);



    什么指针都是一种类型。不算错。但是指向的空间类型有差异。这并不表示地址之间赋值的错。哈。

    2020-06-20 19:25:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载