Visual Studio 2008 компилирует что-нибудь в файл C ++? - PullRequest
3 голосов
/ 06 апреля 2010

Сегодня я заметил, что файл исходного кода в проекте компилировался, хотя в его верхней части содержался мусор. Меня удивило, что все без ошибок пройдет через компилятор. Вот пример кода, который не будет генерировать никаких сообщений об ошибках:

what kind of weird behaviour is this???

#include "stdafx.h"

// what is up?

int foo(int bar)
{
    bla bla bla?????
    return bar;
}

and more junk???

Что в мире делает компилятор, чтобы этот код компилировался без каких-либо сообщений об ошибках? Я использую Visual Studio 2008, и это неуправляемый код C ++. Функция foo на самом деле не генерируется в объектном файле, поэтому ее нельзя использовать, но почему нет ошибок ???

Ответы [ 5 ]

7 голосов
/ 06 апреля 2010

Часть перед строкой #include "stdafx.h" на самом деле объяснима (учитывая, что файл фактически скомпилирован): все до и включая эту строку игнорируется, если включены предварительно скомпилированные заголовки (по умолчанию). См. Википедия по предварительно скомпилированным заголовкам для краткой сводки.

Однако, если приведенный ниже синтаксически неправильный код не содержит ошибок, вероятно, ваш файл вообще не компилируется.

4 голосов
/ 06 апреля 2010

Он ничего не компилирует;) Возможно, ваш файл просто не включен в проект.

2 голосов
/ 06 апреля 2010

"Функция foo фактически не генерируется в объектном файле, поэтому ее нельзя использовать"

Это должен быть ваш намек, что он не компилируется. Почему компилятор "компилирует" что-то без вывода?

Либо он не включен, либо вы смотрите не тот файл (технически вариант предыдущего), либо он имеет то же имя, что и другой исходный файл в проекте, и в этом случае будет компилироваться только один. *

0 голосов
/ 07 апреля 2010

Ваш файл, вероятно, просто не компилируется.

OTOH, VC ++, похоже, принял бы это, если бы он был в шаблоне (который не создан)

template <class T>
T foo(T bar)
{
    bla bla bla?????
    return bar;
}

int main()
{
}
0 голосов
/ 07 апреля 2010

Если у меня есть подозрения, что файл не компилируется, я начинаю вставлять:

#pragma message("Reached Here!")

введите строки в источнике, пока не увидите всплывающее сообщение.

Я тестировал исходный код из OP с VS2008 в проекте, в котором используются предварительно скомпилированные заголовки, и bluebrother правильно отображает текст перед первым #include, включая #pragma message.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...