偶然发现这行c代码,但不确定它是否有效。它有什么作用?变量的类型是什么?
const VARNAME = "String of text";
答案 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试图做的是:
VARNAME
; int
int
包含指向字符常量的指针。在我的机器上,它不能编译,可能是因为int
是32位而指针是64位宽。
a.c:1: error: initializer element is not computable at load time
答案 2 :(得分:0)
找到&#34; VARNAME&#34;的定义你会看到的。我会说&#34; char *&#34;。