Что делает эта строка кода c? (const VAR = "string";) - PullRequest
5 голосов
/ 22 февраля 2012

Наткнулся на этот ряд кода c, но не был уверен, действителен он или нет.Что оно делает?Какой тип будет иметь переменная?

const VARNAME = "String of text";

Ответы [ 3 ]

6 голосов
/ 22 февраля 2012

Любопытно, я не ожидал, что это скомпилируется, но это так. Однако компилятору это не очень нравится:

..\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 (Char *)

2 голосов
/ 22 февраля 2012

GCC пытается сделать следующее:

  1. Сделать константу VARNAME с типом по умолчанию, то есть int;
  2. сделать эту константу int содержащейуказатель на символьную константу.

На моей машине он не компилируется, возможно, потому что int имеет размер 32 бита, а указатели имеют ширину 64 бита.

a.c:1: error: initializer element is not computable at load time
0 голосов
/ 22 февраля 2012

Найдите определение «VARNAME», и вы увидите. Я бы сказал что-то вроде "char *".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...