UNIX["ABC"]

и задачки для интервью.
User avatar
sttranik
Уже с Приветом
Posts: 753
Joined: 18 Sep 2000 09:01
Location: Fremont, CA

UNIX["ABC"]

Post by sttranik »

вспомнил хороший вопрос для интервью. есть строчка

printf("%c", UNIX["ABC"]);

вопрос - что напечатается если программу c такой строчкой скомпилировать под *nix, что если под любой другой операционкой.
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

UNIX["ABC"]

Post by Vovka »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by sttranik:
<strong>вспомнил хороший вопрос для интервью. есть строчка

printf("%c", UNIX["ABC"]);

вопрос - что напечатается если программу c такой строчкой скомпилировать под *nix, что если под любой другой операционкой.</strong><hr></blockquote>

Прикольно.
А почему операция [] работает таким странным образом?

Единственный момент, "UNIX" разве должен быть обязательно определён? Ведь "WIN32", например, просто определено, но никакое значение не присвоено. То есть это может просто не откомпилиться.
Vovka
Уже с Приветом
Posts: 1906
Joined: 14 Mar 2001 10:01

UNIX["ABC"]

Post by Vovka »

Ещё мысля опосля. [img:fec9aa474b]images/smiles/icon_wink.gif[/img:fec9aa474b]

Такое вопрос хорош не сколько сам по себе, сколько в идеологическом плане: после объяснения решения про него надо всегда говорить - "вот какие гадости можно сделать с помошью дефайнов, поэтом не ходите, дети, в Афри... тьфу, то есть, не используйте без необходимости дефайны!" [img:fec9aa474b]images/smiles/icon_biggrin.gif[/img:fec9aa474b]
GGH
Уже с Приветом
Posts: 277
Joined: 09 Mar 1999 10:01
Location: RU->CO->CA->MA

UNIX["ABC"]

Post by GGH »

printf("%c", UNIX["ABC"]);

Проверить не могу, у нас тут одни сервера, компайлеров нету. Навскидку скажу: 100 к одному, что эта хрень просто не должна компилиться по причине нецелого индекса. Если это дело как-то обойти, то оно опять же не должно компилиться из-за неопределенного 'UNIX'. Если и это как-то обойти, то полученная хрень должна рухать в core, т.к "ABC" - число не хилое, будет memory fault. Все это, естественно, в UNIXе. Чего там "в других системах" наворочено, не знаю.
AK70
Уже с Приветом
Posts: 3127
Joined: 10 Apr 2001 09:01
Location: MD

UNIX["ABC"]

Post by AK70 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by GGH:
<strong>printf("%c", UNIX["ABC"]);

Проверить не могу, у нас тут одни сервера, компайлеров нету. Навскидку скажу: 100 к одному, что эта хрень просто не должна компилиться по причине нецелого индекса. </strong><hr></blockquote>


in C, a[i] is equivalent to i[a], where
char* a; int i;

UNIX could be the integer macro in one of the UNIX's *.h files, I guess.
GGH
Уже с Приветом
Posts: 277
Joined: 09 Mar 1999 10:01
Location: RU->CO->CA->MA

UNIX["ABC"]

Post by GGH »

Согласен, если 'UNIX' определено как целое, то должно напечататься "ABC"[UNIX]. Если исходить из предположения, что в UNIXе эта макра определена как 1, то напечатается буква B. Но это не факт, что она определена. Опять же, если предполагать, что в других системах макра UNIX не определена, то программуля не будет компилиться по выше мной описанным причинам.
User avatar
sttranik
Уже с Приветом
Posts: 753
Joined: 18 Sep 2000 09:01
Location: Fremont, CA

UNIX["ABC"]

Post by sttranik »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by AK70:
<strong>UNIX could be the integer macro in one of the UNIX's *.h files, I guess.</strong><hr></blockquote>

it used to be. now it is not [img:46fc662108]images/smiles/icon_sad.gif[/img:46fc662108]
UNIX was defined by default to 1 on unix systems and to 0 on others. i.e. now Visual C doesn't know this macro.

anyway this quiz demonstrates how [] operator works in C. it comes as a big suprise for some people who don't know it.

next interesting question would be what happens if
int a[10]={0,1,2,3,4,5,6,7,8,9};
printf("%d", 1[a]);

would 1[a] be equivalent to *(&a[0] + 1) ?
User avatar
adb
Уже с Приветом
Posts: 9275
Joined: 14 Dec 2001 10:01
Location: Российская Федерация

UNIX["ABC"]

Post by adb »

Всё это конечно очень клевои прикольно. Но я не совсем понимаю все таки, что этим самым вопросом можно узнать о профессионализме человека, которому его задают? Неужели такие вопросы норма для интервью?
User avatar
listen_me_now
Новичок
Posts: 86
Joined: 27 Feb 2001 10:01
Location: Omsk , Russia

UNIX["ABC"]

Post by listen_me_now »

А вот еще из той же оперы :
попробуйте навскидку определить , чего напечатается :

char *ap[] = {
"INTEGER",
"PROPORTION",
"DEBUGGER",
"PORTABLE",
"TOWER!"
};

char **app[] = { ap + 4, ap + 3, ap + 2, ap + 1, ap };
char ***ppp = app;
char ****pppp = &ppp;

void main()
{
printf("%.*s", 2, *--**pppp);
printf("%.*s", 3, *(++*pppp[0] - 4));
printf("%s " , ++*--*++pppp[0] + 5);
printf("%.*s", 2, *++pppp[0][3] + 3);
printf("%s\n", (*pppp + 2)[-2][2] + 2);
}
AK70
Уже с Приветом
Posts: 3127
Joined: 10 Apr 2001 09:01
Location: MD

UNIX["ABC"]

Post by AK70 »

<blockquote><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><hr>Originally posted by adb:
<strong>Всё это конечно очень клевои прикольно. Но я не совсем понимаю все таки, что этим самым вопросом можно узнать о профессионализме человека, которому его задают? Неужели такие вопросы норма для интервью?</strong><hr></blockquote>

this is a nice question. if you know C, u may answer it right even if u didn't program on Unix.

Return to “Головоломки”