еще можно сразу прочитать учебник, и не создавать тем с неумными вопросами. если очень хочется проверить что-то на "С" - есть codepad.org , ideone.com , etc
В общем итоге ясен. qqwe Microsoft Visual Studio 2008 Было очень забавно когда оказалось что один из компиляторов С различает перегруженные функции только по размеру параметров. Вот чтоб подобного подобного нежданчика не было решил поинтересоваться.
Поясняю - там если расширение файла .c - компилируется как с, а если .cpp - компилируется как с++. Вот такая загогулина. Вообще, интересно наблюдать, как некоторые, вместо того, чтобы коротко по делу ответить, предпочитают на протяжении нескольких постов упорно отмалчиваться, попутно доказывая собеседнику его невежество. Ну как интересно. Непонятно, что движет этими людьми. Приходит на ум только одна причина - желание поднять свою мнимую продвинутость за счёт других.
не совсем точно. все зависит от ключика языка компиляции, который можно менять независимо от расширения файла =) просто так исторически сложилось, что расширение .cpp подразумевает плюсовый код.
InsidE Загадками говорите, коллега. NeuronViking Возможно. Только ключик у каждого компилятора свой, видимо. А определение по расширению - способ универсальный. Ждём специалиста, который точно всё разъяснит.
Для того, чтобы ответить на этот вопрос, не нужно быть специалистом. Достаточно посмотреть в свойство .c / .cpp в проекте под названием "Compile As..." с двумя возможными опциями. Надеюсь что понятно, с какими именно.
_DEN_ И всё же не совсем ответ полный, наверное. Как обстоят дела в случае компиляции из командной строки без указания параметра /TP или /TC? Наиболее очевидный ответ - проверь сам, конечно) Я и проверил. Вот этот текст: Код (Text): class A { }; int main() { A a; return 0; } , сохранённый в файле с расширением .cpp, компилируется, а с расширением .c - не компилируется. А вы говорите, "Compile As..."
qqwe В общем компилятор от WDK 7 был такой код: Код (Text): VOID MyProc(ULONG p){ }; VOID MyProc(PUNICODE_STRING str){ }; Так компилятор или линкер(уже не помню) ругались на эти функ. Если же сделать вот так: Код (Text): VOID MyProc(CHAR p){ }; VOID MyProc(PUNICODE_STRING str){ }; то все ок. В итоге пришлось сделать вот так: Код (Text): VOID MyProc(ULONG p){ }; VOID MyProcStr(PUNICODE_STRING str){ }; С этого и вывод был:
Во всех компиляторах *.с по умолчанию компилируется как Си, *.срр - как С++ Остальное задаётся ключами компиляции/параметрами проекта. Не хочу тебя расстраивать, но в Си вообще нету и быть не может перегруженных функций. И компилятор их никак не различает.
XshStasX Типов ULONG и PUNICODE_STRING ни в С, ни в С++ нет. Это #define'ы. Внимательно посмотри, во что разворачиваются ULONG и PUNICODE_STRING, и если они разворачиваются в один базовый тип, то компилятор видит две абсолютно одинаковые функции. Обновление: Прошу прощения, не внимательно прочитал вопрос и не заметил, что изначальный вопрос про С. В С перегрузки функций никогда не было. Вышесказанное про раскрытие #define справедливо для перегрузок в С++.