This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320F28379D:为什么声明的字符串链接到.const、但无符号字符阵列[]不是?

Guru**** 2349670 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/609428/compiler-tms320f28379d-why-are-declared-strings-linked-to-const-but-unsigned-char-array-are-not

器件型号:TMS320F28379D

工具/软件:TI C/C++编译器

您好!

我遇到这种行为...

//此全局声明链接到.econst

静态无符号字符*数组="string\0";

//此全局声明链接到.ebss

静态无符号字符阵列[7]={"S"、"t"、"r"、"i"、"n"、"n"、 'g'、'\0'};

我希望这两个链接到.ebss。 为什么第一个常数被视为没有"const"关键字的常数? 这是标准吗?

此致、

SAL

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这些是不同类型的物体。 在第一种情况下、"string\0"是匿名字符串常量、"Array"只是指向它的指针。 由于 Array 不是 const、因此它应该出现在.ebss 中。 但是、"string\0"存储在"其他地方"、可能存储在.econst:string 中。
    在第二种情况下、Array 是一个"unsigned char"数组、而不是指针。 初始化程序列表提供 Array 的初始值。 此初始化程序列表可能存储在.cinit 中、该文件是只读的。 启动时、初始化程序列表被复制到变量 Array 中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的解释。 这很有帮助。

    此致、
    SAL
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想我会指出一些其他的细节。  这些细节最初可能会有点令人困惑。  但是,为了全面理解,我想我要指出这些。

    您不需要中的\0 ...

    [引用 user="Sal Pezzino"]静态无符号字符*数组="string\0";

    它始终添加到"引用字符串"的末尾。  但是,您确实需要在...中使用\0。

    [引用 user="Sal Pezzino"]静态无符号字符阵列[7]={"S"、"t"、"r"、"i"、"n"、"n"、 'g'、'\0'};[/报价]

    (笑声) 因为您显式指定了每个字符值。  编写第二个(而不是第一个)示例的等效方法是...

    unsigned char Array[]="string"; 

    请注意您不需要\0。

    谢谢、此致、

    乔治