Разница stricmp и _stricmp в Visual Studio?

Я могу задавать глупый вопрос, но я действительно не могу найти ответ с Google, и я все еще новичок в использовании MSVS.

Недавно мне нужно было использовать функции для сравнения двух строк. То, что я не понимаю, – это различие stricmp и _stricmp. Оба они могут использоваться для сравнения строк и возвращения тех же результатов. Я пошел проверить их:

char string1[] = "The quick brown dog jumps over the lazy fox"; char string2[] = "The QUICK brown dog jumps over the lazy fox"; void main( void ) { char tmp[20]; int result; /* Case sensitive */ printf( "Compare strings:\n\t%s\n\t%s\n\n", string1, string2 ); result = stricmp( string1, string2 ); if( result > 0 ) strcpy( tmp, "greater than" ); else if( result  0 ) strcpy( tmp, "greater than" ); else if( result < 0 ) strcpy( tmp, "less than" ); else strcpy( tmp, "equal to" ); printf( "\t_stricmp: String 1 is %s string 2\n", tmp ); } 

результат показывает, что они одинаковы:

 Compare strings: The quick brown dog jumps over the lazy fox The QUICK brown dog jumps over the lazy fox stricmp: String 1 is equal to string 2 _stricmp: String 1 is equal to string 2 

Мне интересно, почему …

stricmp – это функция POSIX, а не стандартная функция C90. Чтобы избежать конфликтов имен, Microsoft stricmp несоответствующее имя ( stricmp ) и рекомендует вместо этого использовать _stricmp . Нет никакой разницы в функциональности ( stricmp – просто псевдоним для _stricmp .)

Для многих функций библиотеки, включая все функции , префиксные символы подчеркивания – это идея Microsoft о чем-то. Я точно не помню, что именно.

Неподчеркнутая версия очень портативна. Код, который использует _stricmp() , _strcpy() и т. Д., Должен обрабатываться как-то-edit, #defined и т. Д. – если код будет обработан другим компилятором.