вспомнил хороший вопрос для интервью. есть строчка
printf("%c", UNIX["ABC"]);
вопрос - что напечатается если программу c такой строчкой скомпилировать под *nix, что если под любой другой операционкой.
UNIX["ABC"]
-
- Уже с Приветом
- Posts: 1906
- Joined: 14 Mar 2001 10:01
UNIX["ABC"]
<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", например, просто определено, но никакое значение не присвоено. То есть это может просто не откомпилиться.
<strong>вспомнил хороший вопрос для интервью. есть строчка
printf("%c", UNIX["ABC"]);
вопрос - что напечатается если программу c такой строчкой скомпилировать под *nix, что если под любой другой операционкой.</strong><hr></blockquote>
Прикольно.
А почему операция [] работает таким странным образом?
Единственный момент, "UNIX" разве должен быть обязательно определён? Ведь "WIN32", например, просто определено, но никакое значение не присвоено. То есть это может просто не откомпилиться.
-
- Уже с Приветом
- Posts: 1906
- Joined: 14 Mar 2001 10:01
UNIX["ABC"]
Ещё мысля опосля. [img:fec9aa474b]images/smiles/icon_wink.gif[/img:fec9aa474b]
Такое вопрос хорош не сколько сам по себе, сколько в идеологическом плане: после объяснения решения про него надо всегда говорить - "вот какие гадости можно сделать с помошью дефайнов, поэтом не ходите, дети, в Афри... тьфу, то есть, не используйте без необходимости дефайны!" [img:fec9aa474b]images/smiles/icon_biggrin.gif[/img:fec9aa474b]
Такое вопрос хорош не сколько сам по себе, сколько в идеологическом плане: после объяснения решения про него надо всегда говорить - "вот какие гадости можно сделать с помошью дефайнов, поэтом не ходите, дети, в Афри... тьфу, то есть, не используйте без необходимости дефайны!" [img:fec9aa474b]images/smiles/icon_biggrin.gif[/img:fec9aa474b]
-
- Уже с Приветом
- Posts: 277
- Joined: 09 Mar 1999 10:01
- Location: RU->CO->CA->MA
UNIX["ABC"]
printf("%c", UNIX["ABC"]);
Проверить не могу, у нас тут одни сервера, компайлеров нету. Навскидку скажу: 100 к одному, что эта хрень просто не должна компилиться по причине нецелого индекса. Если это дело как-то обойти, то оно опять же не должно компилиться из-за неопределенного 'UNIX'. Если и это как-то обойти, то полученная хрень должна рухать в core, т.к "ABC" - число не хилое, будет memory fault. Все это, естественно, в UNIXе. Чего там "в других системах" наворочено, не знаю.
Проверить не могу, у нас тут одни сервера, компайлеров нету. Навскидку скажу: 100 к одному, что эта хрень просто не должна компилиться по причине нецелого индекса. Если это дело как-то обойти, то оно опять же не должно компилиться из-за неопределенного 'UNIX'. Если и это как-то обойти, то полученная хрень должна рухать в core, т.к "ABC" - число не хилое, будет memory fault. Все это, естественно, в UNIXе. Чего там "в других системах" наворочено, не знаю.
-
- Уже с Приветом
- Posts: 3127
- Joined: 10 Apr 2001 09:01
- Location: MD
UNIX["ABC"]
<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.
<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.
-
- Уже с Приветом
- Posts: 277
- Joined: 09 Mar 1999 10:01
- Location: RU->CO->CA->MA
UNIX["ABC"]
Согласен, если 'UNIX' определено как целое, то должно напечататься "ABC"[UNIX]. Если исходить из предположения, что в UNIXе эта макра определена как 1, то напечатается буква B. Но это не факт, что она определена. Опять же, если предполагать, что в других системах макра UNIX не определена, то программуля не будет компилиться по выше мной описанным причинам.
-
- Уже с Приветом
- Posts: 753
- Joined: 18 Sep 2000 09:01
- Location: Fremont, CA
UNIX["ABC"]
<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) ?
<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) ?
-
- Уже с Приветом
- Posts: 9275
- Joined: 14 Dec 2001 10:01
- Location: Российская Федерация
UNIX["ABC"]
Всё это конечно очень клевои прикольно. Но я не совсем понимаю все таки, что этим самым вопросом можно узнать о профессионализме человека, которому его задают? Неужели такие вопросы норма для интервью?
-
- Новичок
- Posts: 86
- Joined: 27 Feb 2001 10:01
- Location: Omsk , Russia
UNIX["ABC"]
А вот еще из той же оперы :
попробуйте навскидку определить , чего напечатается :
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);
}
попробуйте навскидку определить , чего напечатается :
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);
}
-
- Уже с Приветом
- Posts: 3127
- Joined: 10 Apr 2001 09:01
- Location: MD
UNIX["ABC"]
<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.
<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.