2010-04-06 4 views
3

Я заметил сегодня, что файл исходного кода в проекте компилировался, хотя у него был хлам вверху. Мне стало интересно, что все пройдет без ошибок через компилятор. Вот пример кода, который не будет создавать какие-либо сообщений об ошибках:Visual Studio 2008 компилирует что-либо в файле C++?

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 фактически не генерируется в объектном файле, поэтому ее нельзя использовать, но почему нет ошибок ???

+0

Вы абсолютно уверены, что это компилируется? Возможно, установка с ошибкой не удалась где-то :-) – Cameron

ответ

4

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

+0

Было много раз, когда я работал над одним файлом и либо а) не включал его в проект, либо б) работал над файлом в отдельном проекте в рамках решения и не имел этого в качестве проекта «StartUp». –

+0

Файл был включен в проект. Создавался файл .obj. Результат сборки Visual Studio показывает, что компилятор запускается в исходном файле. –

2

«Функция Foo на самом деле не генерируется объектный файл, поэтому он не может быть использован»

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

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

+0

Это то, что я думал, пока не проверил, что был создан файл .obj. Итак, компилятор работает на нем и генерирует выходной файл. У меня просто нет моей функции. –

7

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

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

+0

Код собирался. Он генерировал файл .obj, и я мог видеть, что компиляция происходит на выходе.Я также просто щелкнул правой кнопкой мыши по исходному файлу и, выбрав его, скомпилировал его, поэтому я уверен, что он скомпилировался. –

+0

@Brad: Вы имеете в виду щелчок правой кнопкой мыши по исходному файлу в проводнике решений? Если это так, вы все равно не сможете скомпилировать файл, который видите - вы можете перетащить его в другой файл с тем же именем. Попробуйте это: закройте файл, который вы можете увидеть, и дважды щелкните по нему в проводнике решений, чтобы открыть реальную копию, затем выполните некоторые простые, но ошибки, вызывающие изменения и компиляцию. – quamrana

0

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

#pragma message("Reached Here!") 

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

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

+0

Предварительно скомпилированные заголовки звучат так, как будто это может быть проблемой. Я исследую это больше! –

0

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

Ото, VC++, казалось бы принять это, если он был в шаблоне (который не инстанцирован)

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

int main() 
{ 
} 
Смежные вопросы