在這行c代碼上陷入困境,但不確定它是否有效。它有什麼作用?變量有什麼類型?這個c代碼行做什麼? (const VAR =「string」;)
const VARNAME = "String of text";
在這行c代碼上陷入困境,但不確定它是否有效。它有什麼作用?變量有什麼類型?這個c代碼行做什麼? (const VAR =「string」;)
const VARNAME = "String of text";
奇怪的是,我沒想到會編譯它,但它確實如此。但是,編譯器不喜歡太多:
..\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(字符*)
在你的環境中是的,但我相信'VARNAME'是在OP的代碼中定義的。 – moose 2012-02-22 13:01:54
由於sizeof(int)'可能小於sizeof(char *)',所以它甚至是危險的。 – 2012-02-22 13:04:03
這可能適用於你的盒子,但將指針存儲在int中具有實現定義的行爲。 – 2012-02-22 13:04:42
找到「VARNAME」的定義,你會看到。我會說「char *」。
什麼GCC嘗試做的是小:
int
;int
包含一個指向字符常量的指針。在我的機器上,它不能編譯,可能是因爲int
是32位,指針是64位寬。
a.c:1: error: initializer element is not computable at load time
希望這[LINK1](http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html),[LINK2](http://www.tutorialspoint.com/ansi_c/c_using_constants .htm)可以幫助你... – 2012-02-22 12:58:48
只是出於好奇,你在哪裏遇到這個小憎惡? – 2012-02-22 13:09:07