![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
vnsk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.7.2009 Репутация: нет Всего: нет |
1) С-файлы отлично компилируются в консольном проекте.
2) Изучаю MFC с помощью Визарда. - Тоже ок. 3) Подключаю С-файлы к п.2; - море ошибок... --- Пробовал у С-ишников заменить расширения на СРР. - Тоже много ошибок. Правда другие. --- Вставлял (по рекомендации инета) первой строкой #include "stdafx.h". Где-то компилируется, а где-то - еще один вариант ошибок. В частности - наотрез отказывается воспринимать конструкции С - goto METKA. --- Добавлял "ручкам" в опции компилятора /Tс и /Tp. Бывало улучшение, но эти опции "слетают" неконтролируемо от меня. ВОПРОСЫ: 1) Как корректно работать одновременно с С и С++ файлами? 2) Как корректно указать опции в зависимости от расширения? 3) Кто знает инфу на русском про "сабж"? - Линки, плз. |
|||
|
||||
InvalidProperty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: 2 Всего: 9 |
вообще я лично сильно не заморачивался по этому поводу и, когда нужно было для какого-то уже имеющегося сишного файла создать проект, я так и делал: создавал проект и подключал к нему уже существующий файл. Честно говоря, не понимаю, в чем проблема у тебя
-------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
vnsk, во-первых, как ты подключаешь си файл? Инклюдом или добавляешь в проект?
Во-вторых, если нет крайней необходимости в MFC, то изучай что-нибудь более актуальное (Qt, например). |
|||
|
||||
vnsk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.7.2009 Репутация: нет Всего: нет |
2bsa
> Во-вторых, если нет крайней необходимости в MFC Я прилично знаю С. Сейчас на каникулах хочу освоить МФС (именно МФС!). Чтобы реализовать интерфейс для своих сишных функций. Проблему описал в заглавном топике. > во-первых, как ты подключаешь си файл В проект. В VC6 не нашел, где выставляются опции /Tc и /Tp. "Ручками" добавлял их в ProjectOptions... Но при добавлении,исключении файлов в проект эти опции "слетают". ТРЕБУЕТСЯ: ссылки на доки (на русском) или изложение собственного опыта. |
|||
|
||||
Леопольд |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Листинг ошибок мог бы помочь. Телепатов, увы, здесь ещё не завелось. ![]() Добавлено @ 17:32
Полностью согласен. Хотя, можно не Qt а wxWidgets. ![]() Добавлено @ 17:37 Между С++ и С есть некоторые различия, навскидку помню только одно - void func() {} В С это эпсилон - void func(...) {} В С++ это функция без аргументов - void func(void) {} Добавлено через 11 минут и 15 секунд
У Страуструпа в приложении "Б.2. Совместимость С/С++" Это сообщение отредактировал(а) Леопольд - 23.7.2009, 17:38 -------------------- вопросов больше чем ответов |
||||||
|
|||||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я на С не пишу, но боюсь его. вот:
![]() |
|||
|
||||
bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
И чего испугался? Это устаревшая форма, сейчас не используется. (Кажется, современные компиляторы выдают варнинг на это).
Опять же, если у тебя нет особых причин работать с VS 6, то смени на что-нибудь современное. Потому что есть риск научиться писать "нестандартные" программы (VS 6 сильно не соответствует стандарту). Теперь охота посмотреть на ошибки, которые выдает компилятор. |
||||||
|
|||||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
испугался непривычной форма записи по сравнению с С++. вот ещё пример. всё компилится без warning'oв.
*** после того, как я понял, что слово this не является ключевым, уже легче стало ![]() вобщем здесь
мы просто уточняем типы параметров. как всё просто оказалось ![]() |
||||
|
|||||
vnsk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.7.2009 Репутация: нет Всего: нет |
Спасибо всем ответившим, но...
> ... Полностью согласен. Хотя, можно не Qt а wxWidgets > ... Qt - это удобная библиотека для создания GUI. Мало что с ней по удобству и охвату сравниться может. > ... Опять же, если у тебя нет особых причин работать с VS 6, то смени на что-нибудь современное. Ребята... я кроме С и Фортран знаю. Но сформулировал в теме четко: MFC + C; на VC6. Зачем оффтопик-шутки? > Добавлено @ 17:37 > Между С++ и С есть некоторые различия, навскидку помню только одно - void func() {} "Аднака" я спрашивал про опции компилятора. В различий не одно. Но речь не о них. > Цитата(vnsk @ 23.7.2009, 15:05) > ТРЕБУЕТСЯ: ссылки на доки (на русском) или изложение собственного опыта. > У Страуструпа в приложении "Б.2. Совместимость С/С++" До этого еще процесс не дошел. Тут только проблемы компилятора. > Теперь охота посмотреть на ошибки, которые выдает компилятор. Ок. Ниже мои мученья. Рассматривал процесс с учетом двух обстоятельств: А) насильного включения в С-шные файлы первой строчкой (по рекомендации инета) #include "stdafx.h" В) установки "ручкам" в опции компилятора /Tс и /Tp. Первый пункт - 2 варианта; второй - три. Итого = 6 вариантов. Привожу их все: A) !это - файл на С! //#include "stdafx.h" #include "header.h" int inc( int data ) { data = data + 1; return data; } B) !это - опции ProjectOptions! /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"Debug/primer.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c ========================================= 1) нет "stdafx.h"; нет /Tc & /Tp; результат: Linking... primerView.obj : error LNK2001: unresolved external symbol "int __cdecl inc(int)" (?inc@@YAHH@Z) Debug/primer.exe : fatal error LNK1120: 1 unresolved externals 2) нет "stdafx.h"; есть /Tc; результат: Compiling... StdAfx.cpp c:\...\vc98\mfc\include\afx.h(15) : fatal error C1189: #error : MFC requires C++ compilation (use a .cpp suffix) Error executing cl.exe. 3) нет "stdafx.h"; есть /Tp; результат: primer.exe - 0 error(s), 0 warning(s) 4) есть "stdafx.h"; нет /Tc & /Tp; результат: prim.C c:\...\vc98\mfc\include\afx.h(15) : fatal error C1189: #error : MFC requires C++ compilation (use a .cpp suffix) Error executing cl.exe. primer.exe - 1 error(s), 0 warning(s) 5) есть "stdafx.h"; есть /Tc; результат: Compiling... tdAfx.cpp c:\...\vc98\mfc\include\afx.h(15) : fatal error C1189: #error : MFC requires C++ compilation (use a .cpp suffix) Error executing cl.exe. 6) есть "stdafx.h"; есть /Tp; результат: primer.exe - 0 error(s), 0 warning(s) P.S. Моя функция вызывалась вот так: ///////////////////////////////////////////////////////////////////////////// // CPrimerView message handlers void CPrimerView::OnPrimerGo() { // TODO: Add your command handler code here char buffer[20]; data = inc(data); // моя функция на С _itoa(data,buffer,10); AfxMessageBox(buffer); } ========================================================= ВОПРОСЫ: 1) Действительно ли необходимо включение в С-файлы #include "stdafx.h" ? 2) Действительно ли опция компилятора /Tp убирает конфликты, когда в проекте одновременно С и СРР файлы? 3) КАК (в оболочке VC6) выставляется эта опция? - Я так и не нашел, а "ручками" набивать - нетрудно, но сомнительно... 4) Почему опция /Tp неконтролируемо "слетает" после удаления/добавления в проект файлов? Заранее спасибо ответившим по-существу. d:) |
|||
|
||||
bsa |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
1. нет (более того, это вредно; этот stdafx.h необходим, чтобы работала кривая (имхо) реализация прекомпиляции заголовочных файлов, в других компиляторах этого требования нет)
2. нет, она просто заставляет файл Си компилироваться компилятором С++ (документацию читать не приучен?) 3. а зачем? Это хак. 4. читай пп. 2 и 3. Все ясно. В Си и С++ разные сигнатуры у функций. Т.е. когда ты пишешь: int inc(int a); То компилятор С++ создает символ "?inc@@YAHH@Z". А компилятор Си: "inc" Чтобы таких проблем не было, в С++ введена специальная конструкция extern "C", которая ставится перед объявлением функции и говорит компилятору, что необходимо генерировать символы в стиле Си:
Так как каждый раз писать extern "C" любому мало мальски уважающему себя программисту лень, то делается специальная обертка вокруг объявлений функций (ее, кстати, ты мог легко подсмотреть в stdio.h, например):
|
||||||||
|
|||||||||
vnsk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.7.2009 Репутация: нет Всего: нет |
2bsa
Спасибо за развернутый ответ. > Тебе вполне серьезно было порекомендовано по возможности отказаться от > использования устаревшего решения в пользу более современного и удобного. Я сразу ответет "нет". И это не каприз... ![]() > Чтобы таких проблем не было, в С++ введена специальная конструкция extern "C", > которая ставится перед объявлением функции и говорит компилятору, что необходимо > генерировать символы в стиле Си: > 2. ... (документацию читать не приучен?) Читаю, но сложно самостоятельно расставить приоритеты по темам... Но вот, уже наверстываю! Когда "через задницу" заставил компилироваться код, перешел в своих файлах (С) к расширению СРР. Не ожидал, что исправлений потребовалось немного. В осовном - приведение типов функций; на "С" удобно было описывать void* fun() и все присвивания шли без помарок. --- ВОПРОС: насколько жизненно использование С-кода в С++ проектах? С точки зрения надежности. Т.к. у меня в основном "арифметика", то сомневаюсь в достаточно сложных структурах (смесь всего и вся). |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
vnsk, WinAPI - написан на Си. Любая программа на С++ под Windows явно или неявно использует WinAPI...
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |