这个c代码行做了什么? (const VAR =“string”;)

时间:2012-02-22 12:55:46

标签: c string variables

偶然发现这行c代码,但不确定它是否有效。它有什么作用?变量的类型是什么?

const VARNAME = "String of text";

3 个答案:

答案 0 :(得分:6)

奇怪的是,我没想到要编译它,但确实如此。但是,编译器不太喜欢它:

..\main.c:4:7: warning: type defaults to 'int' in declaration of 'VARNAME'
..\main.c:4:17: warning: initialization makes integer from pointer without a cast

因此它确实将 int 作为默认类型,因此VARNAME有一个指针值,因为字符串是一个指针(后来可以转换为 char *)

这非常有效(在Intel IA32机器上):

#include<stdio.h>

const VARNAME = "String of text";

int main()
{
    printf("%s\n", (char*)VARNAME);
    return 0;
}

但我个人不会使用这种隐式输入。正如下面的评论所解释的那样:

  由于sizeof(int)可能小于,因此它甚至是危险的   的sizeof(字符*)

答案 1 :(得分:2)

GCC试图做的是:

  1. 使用默认类型VARNAME;
  2. 创建一个常量int
  3. 使此常量int包含指向字符常量的指针。
  4. 在我的机器上,它不能编译,可能是因为int是32位而指针是64位宽。

    a.c:1: error: initializer element is not computable at load time
    

答案 2 :(得分:0)

找到&#34; VARNAME&#34;的定义你会看到的。我会说&#34; char *&#34;。