首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >警告函数:‘C4090’:不同的'const‘限定符

警告函数:‘C4090’:不同的'const‘限定符
EN

Stack Overflow用户
提问于 2015-08-13 03:31:19
回答 1查看 11.9K关注 0票数 2

我观察到错误"warning C4090:'function‘:different 'const’限定符“,因为下面的代码行。我正在经历其他类似的问题,所以我理解(不是100%)是因为

--> EmployeeList的qsort中的const char* EmployeeList[]和我的声明

代码语言:javascript
复制
    #define Elements(array) (sizeof(array)/sizeof((array)[0]))

   const char *EmployeeList[] =
   {
      "Larry Page", "Sergy Brin", "Sundar Pichai", "Merrisa Mayer"
   };

// called from main
SortEmployee(EmployeeList, Elements(EmployeeList));

int Compare(const void *elemA, const void *elemB)
{
 ...
}

void SortEmployee(const char *EmployeeList[], size_t EmployeeCount)
{
    qsort(EmployeeList, EmployeeCount, sizeof(EmployeeList[0]), Compare);
}

然而,我无法解决它-任何指针如何做它的字符串数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-13 04:12:26

问题是qsort没有将其参数声明为const,而您的代码却声明了。EmployeeList指出,这意味着qsort (在理论上)可能会更改数据。因此,编译器报告了这个错误。

下面是官方的例子:https://msdn.microsoft.com/en-us/library/k77bkb8d.aspx

然而,这里有一个简单的版本来演示我的想法:

代码语言:javascript
复制
void foo(char* a) {
   *a = '1'; // I got pointer to char, and changed this char!
}


int main() {
   const char *a = "A"; // I have "CONSTANT POINTER": it points to CONSTANT memory, that CAN NOT be changed (by the way, string constants can't in many environments).
   foo(a); // I pass it to my function, that will change it.
   return 0;
}

您的编译器将a存储在只读内存中(它可以,因为我们告诉它“这是一个指向只读数据的指针”)。然后修改它(在main函数中)。可能会有不好的事情发生。所以,编译器会警告你“嘿,你把一个指向常量数据的指针传给了某个函数,这个函数不知道这个数据是常量的,可能会改变它。”

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31973854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档