Я вижу, что некоторые связанные вопросы задали, но они или слишком совершенствуются, чтобы я схватил или недостаток в пошаговом руководстве от начала до конца (большинство из них заканчивает тем, что было инсайдером, говорят об их собственных результатах эксперимента). Хорошо здесь это, учитывая эту простую программу:
#include
#include
int main()
{
FILE * f;
char buffer[100];
memset(buffer, 0, 100);
fun();
f = fopen("main.cpp", "r");
fread(buffer, 1, 99, f);
printf(buffer);
fclose(f);
return 0;
}
То, что это делает, в основном распечатать себя (предположите, что имя файла main.cpp
).
Как у меня может быть он, печатают другой файл, говорят foobar.txt
не изменяя исходный код? Это имеет некоторое отношение к выполнению его через VS, ступающий через функции и угоняющий указатель ФАЙЛА прямо прежде fread()
назван. Никакая потребность волноваться о протекающих ресурсах путем вызова fclose()
.
Я попробовал простое f = fopen("foobar.txt", "r")
который дал
CXX0017: Error: symbol "fopen" not found
Какие-либо идеи?
Я узнал решение случайно на Отладке Mozilla в Windows FAQ. Корректная команда для помещения в Непосредственное Окно
f = {,,MSVCR100D}fopen("foo.txt", "r")
Однако это действительно не отвечает на этот вопрос:
{,,MSVCR100D}
часть для какого-либо данного метода? Я знаю изменения версии MSVCR от системы до системы. Как я могу узнать это?Синтаксис фигурных скобок - это оператор контекста VS , который в основном не работает - как указано в ссылке (или, по крайней мере, вряд ли является скрытой жемчужиной). Он используется везде, где движку оценки выражений VS необходимо разрешать функции во время выполнения, например оценка составных выражений в окне просмотра, установка точек останова или (как вы видели) в непосредственных / командных окнах.
Его третий аргумент - это двоичный файл, который включает реализацию функции, которую вы хотите вызвать. Для функции CRT, такой как fopen, это обычно -
MSVCR [версия VS] [D] .dll
(я, кажется, помню, что расширение было необходимо - но, возможно, это изменилось в VS2010). "D" указывает версию отладочной dll. Номер версии VS декодируется как: VS2005 -> 8, VS2008 -> 9, VS2010 -> 10.
Также обратите внимание, что оценочный движок имеет различные другие ошибки , на которые следует обратить внимание.
Чтобы дополнить отличный ответ Офека, вот способ, который я нашел систематически узнать, к какому модулю принадлежит вызов функции. (т.е. часть MSVCR100D
).
fopen
); Я считаю, что вы можете использовать этот метод, чтобы найти имя модуля для любого класса. Это может быть полезно, когда, например, вы просматриваете большую базу кода и хотите на лету вызвать какой-нибудь метод произвольного класса в окне Immediate Window. Вероятно, вы также можете создавать экземпляры классов на лету, вызывая конструктор самостоятельно.
Разве C ++ не был родным языком? Мы почти чувствуем себя в управляемой среде сценариев: P