小编Lun*_*din的帖子

适用于const字符串动态数组的类型

我一直认为这const char **x是一个正确的类型,用于动态分配的const字符串数组,如下所示:

#include <stdlib.h>

int main()
{
    const char **arr = malloc(10 * sizeof(const char *));
    const char *str = "Hello!";
    arr[0] = str;
    free(arr);
}
Run Code Online (Sandbox Code Playgroud)

但是,在使用VS2017编译此代码时,我会收到此警告free:

warning C4090: 'function': different 'const' qualifiers
Run Code Online (Sandbox Code Playgroud)

我的代码有问题吗?FWIW,当我和GCC一起编译时,即使有了,也没有任何警告-Wall -Wextra -pedantic.

c const visual-studio pointer-conversion

17
推荐指数
1
解决办法
283
查看次数

16
推荐指数
1
解决办法
5万
查看次数

const数组指针的正确性?

有人提出一个论点,说在现代C中,我们应该总是通过数组指针将数组传递给函数,因为数组指针具有强类型.例:

void func (size_t n, int (*arr)[n]);
...

int array [3];
func(3, &array);
Run Code Online (Sandbox Code Playgroud)

这听起来像防止各种类型相关和数组越界错误可能是一个好主意.但后来我发现我不知道如何将const正确性应用于此.

如果我这样做void func (size_t n, const int (*arr)[n])那么它是正确的.但是由于指针类型不兼容,我无法再传递数组.int (*)[3]对比const int (*)[3].限定符属于指向的数据,而不属于指针本身.

调用者中的显式强制转换将破坏增加类型安全性的整个想法.

如何将const正确性应用于作为参数传递的数组指针?它可能吗?


编辑

就像信息一样,有人说通过像这样的指针传递数组的想法可能源于MISRA C++:2008 5-2-12.例如,请参阅PRQA的高完整性C++标准.

c const-correctness

16
推荐指数
2
解决办法
1358
查看次数

什么是C11 cor 1:2012?

我刚刚注意到对C11标准进行了修正,称为ISO/IEC 9899:2011/Cor 1:2012.

此更新中发生了哪些变化?

c c11

15
推荐指数
1
解决办法
818
查看次数

在函数调用中,运算符是什么,操作数是什么?

我试图理解C语言的一些基础知识.CRC编程语言说

函数调用是一个后缀表达式,称为函数指示符,后跟括号,其中包含可能为空的逗号分隔的赋值表达式列表(Par.A7.17),它们构成函数的参数.

  1. 在函数调用中,运算符是什么,操作数是什么?

    ()运营商吗?

    函数名是操作数吗?

    ()操作数内的参数是什么?

  2. 函数指示符是函数调用的同义词吗?

谢谢.

c kernighan-and-ritchie language-lawyer function-call-operator

15
推荐指数
2
解决办法
1440
查看次数

用作自己的初始化程序的未初始化变量的行为是什么?

我刚才下面的代码可以用铿锵/ GCC /铛++/G ++编译注意到,使用c99,c11,c++11标准.

int main(void) {
    int i = i;
}
Run Code Online (Sandbox Code Playgroud)

甚至-Wall -Wextra,没有一个编制者甚至报告警告.

通过修改代码int i = i + 1;和使用-Wall,他们可能会报告:

why.c:2:13: warning: variable 'i' is uninitialized when used within its own initialization [-Wuninitialized]
    int i = i + 1;
        ~   ^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)

我的问题:

  • 为什么编译器甚至允许这样做?
  • C/C++标准对此有何看法?具体来说,这是什么行为?UB或实施依赖?

c c++ initialization language-lawyer

15
推荐指数
2
解决办法
1315
查看次数

我是否可以将"仅限构建活动架构"设置为"是"来发布应用商店的更新?

我不小心提交了一个构建到app store的"Build active architecture only"(ONLY_ACTIVE_ARCH)设置为"Yes".我存档的手机是3GS.这是否意味着具有其他架构的手机,如带有ARMv7S的iPhone 5,将无法运行该应用程序?

iphone build ios

14
推荐指数
1
解决办法
7587
查看次数

我可以使用C/C++预处理器添加数字吗?

对于一些基地.基数1甚至.某种复杂的替代.

此外,当然,在现实生产代码中这样做并不是一个好主意.我只是出于好奇而被问到.

c c++ preprocessor metaprogramming

13
推荐指数
4
解决办法
1万
查看次数

动态设置内联的超链接控件的NavigateUrl属性

如何在aspx页面中动态设置独立(不在gridview)超链接控件的内联NavigateUrl属性?

我试图做以下,但它没有奏效.

<asp:HyperLink id="MyLink"
  NavigateUrl="../mypage.aspx?id=<%= pageid %>"
  runat="server">My Page</asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)

.net asp.net webforms hyperlink

13
推荐指数
1
解决办法
8万
查看次数

为什么我可以在gcc -std = c11中使用gets()?

gets()功能已从C语言中删除.标准中不存在此类功能.

然而,我编译以下代码:

#include <stdio.h>

int main (void)
{
  (void) gets (NULL);
}
Run Code Online (Sandbox Code Playgroud)

运用

gcc -std=c11 -pedantic-errors -Wall -Wextra
Run Code Online (Sandbox Code Playgroud)

它编译时没有给出任何错误或警告.同样的,

#include <stdio.h>

int gets;

int main (void)
{}
Run Code Online (Sandbox Code Playgroud)

不会编译(错误:'获得'重新声明为不同类型的符号).

在标准4.一致性§6中,我们可以阅读:

符合实现的实现可能具有扩展(包括附加库函数),前提是它们不会改变任何严格符合程序的行为

鉴于上述情况,我认为即使在迂腐模式下,gcc也不符合标准.是否有一个原因?这是故意还是错误?

GCC版本4.9.1.

编辑:

gcc --version
gcc (x86_64-win32-seh-rev1, Built by MinGW-W64 project) 4.9.1
Run Code Online (Sandbox Code Playgroud)

c gcc gets language-lawyer c11

12
推荐指数
1
解决办法
1189
查看次数