Я довольно начинающий программист, немного изучаю c, но я всегда делал это на Linux с помощью gcc и Vim, но решил попробовать использовать visual studio, и у меня появляются ошибки LNK2005 и LNK1169, я пытался найти ошибки и как их исправить и правильно использовать PCH, потому что я думаю, что было бы полезно учиться, даже если мои программы слишком малы, чтобы использовать его.
Из моего понимания мне нужно #include "stdafx.h"
в верхней части моего исходного файла (называетсяhelloworld.c
«Я не коснулся»stdafx.c
«По умолчанию, который пришел при создании проекта, я создал заголовочный файл с именем»bitwise.h
«и он имеет одну функцию под названием»int bw()
«Я тогда есть»stdafx.h
и все, что я добавил, было #include "bitwise.h"
В моем заголовкеbitwise.h
я пытался включить #include "stdafx.h" #include "stdafx.c" #include <stdio.h>
и даже не включая ничего. все это нарушает мою программу. Единственный способ получить его для компиляции — это если я закомментирую//bw();
тогда моя программа компилируется просто отлично.
вот файлы, которые я думаю, может быть виновником:
#include "stdafx.h"
int main()
{
printf("\tHello World!\n");
getchar();
bw(); //If this line is commented out everything works just Honky-Dory
getchar();
return 0;
}
#include "stdafx.h" //I've tried lots of diffrent lines here, nothing works
int bw()
{
int a = 1;
int x;
for (x = 0; x < 7; x++)
{
printf("\nNumber is Shifted By %i Bits: %i", x, a << x);
}
getchar();
return 0;
}
// stdafx.cpp : source file that includes just the standard includes
// $safeprojectname$.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
// TODO: reference any additional headers you need in STDAFX.H
// and not in this file
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"#include "bitwise.h"#include <stdio.h>
#include <tchar.h>// TODO: reference additional headers your program requires here
Это не так много о PCH. Вы перепутали файлы заголовков (.h) и реализации (.c). Что вам нужно сделать, это разделить реализацию и объявление. Вы должны сделать следующее:
переименуй свой bitwise.h
в bitwise.c
так как это ваш файл реализации, а не заголовок!
создать новый файл bitwise.h
и поместите туда только объявление, оно должно выглядеть так:
#pragma once
int bw();
Ваш проект должен быть в состоянии скомпилировать после этого.
Также обратите внимание, что файл PCH должен содержать включения, которые редко меняются, что, вероятно, не ваш случай, так как вы включаете также bitwise.h
, Вы можете удалить это включение из stdafx.h
и включить его в свой helloworld.c
,
И просто примечание, во время обучения C не делайте подумайте о включении .c файла через #include
! Если это исправит некоторые ваши ошибки компиляции, ваш проект проекта, вероятно, очень неправильно.
Nitpick: Вам не нужно включать #include stdafx.h в bitwise.h, хотя он все равно должен иметь #pragma один раз.
Ваш код для bw()
должен по-прежнему находиться в отдельном файле bitwise.c, а не в заголовке. Я думаю, что вы можете путать скомпилированные заголовки с встраиванием функций? Прямо сейчас, ваш код для bw
компилируется в то, что должно быть фиктивным объектом stdafx, и снова в главном объекте, и вызывает конфликт при компоновке.
Кроме того, вы помните, чтобы пометить ваш stdafx.h как предварительно скомпилированный заголовок (/ Yu), а stdafx.cpp как … что бы ни означало / Yc? Убедитесь, что оба параметра установлены для всех конфигураций проекта для оба файла в Свойствах -> C / C ++ -> Скомпилированные заголовки.