Формат файла заголовка C
Попытка получить правильный формат для настройки заголовочных файлов для моих внешних функций, которые я делаю для школы.
В файле.h я размещаю #ifndef <token> #define <token>
а также #endif
препроцессор звонит вокруг моих прототипов, но дополнительные #defines
, для использования внутри самой функции, перейдите в файл.c или в.h?
При добавлении всего пакета в мою основную программу мне просто нужно добавить вверху моей основной программы #include "name_of_function_pkg.h"
или в заголовочном файле тоже должна быть ссылка на файл.c?
[Редактировать] Добавил код для вас в соответствии с просьбой. Все работает хорошо, но просто хочу написать это по стандарту, как все остальные.
Мой основной () файл:
#include <stdio.h>
#include "utils.h"
// DEFINED Values
#define FALSE 1
#define TRUE 0
// MAIN CODE
int main()
{
// Local Variables
int success = TRUE;
float fValue,fConvert;
float fSrcFactor,fDstFactor;
char cSourceCurrency;
char cDestCurrency;
char cNewline;
// User Input
printf("Enter source currency: ");
scanf("%c%c",&cSourceCurrency,&cNewline);
printf("Enter destination currency: ");
scanf("%c%c",&cDestCurrency,&cNewline);
printf("Enter the value: ");
scanf("%f",&fValue);
fConvert = convert( cSourceCurrency, cDestCurrency, fValue);
// Output
if(fConvert == -1)
{
printf("There was an error with the input.");
}
else printf("%c%.2f = %c%.2f",cSourceCurrency,fValue,cDestCurrency,fConvert) ;
// Exit
return 0;
}
Мой файл utils.h:
#ifndef UTILS
#define UTILS
float convert( char cSourceCurrency, char cDestCurrency, float fValue );
#endif
Мой файл utils.c [усеченный]
// Should these defines be in the .h file?
#define CDN 1
#define YEN 95.04
#define EUR 0.69
#define E2Y 137.69
#define FALSE 1
#define TRUE 0
float convert( char cSourceCurrency, char cDestCurrency, float fValue )
{
// Function Variables
int success = TRUE;
float fConvert;
float fSrcFactor,fDstFactor;
// Error Checking
if( (cSourceCurrency!='Y') && (cSourceCurrency!='$') && (cSourceCurrency!='E'))
{
success = FALSE;
return (-1);
}
if( (cDestCurrency!='Y') && (cDestCurrency!='$') && (cDestCurrency!='E'))
{
success = FALSE;
return (-1);
}
2 ответа
Вы должны понимать, как препроцессор C работает и обрабатывает #include
директивы. Прочитайте вики-страницу на препроцессоре C и документацию GNU cpp в компиляторе GCC.
Это чисто текстовая вещь. Препроцессор заменяет #include
включенным файлом, и расширяет #define
-d макросы, которые появляются позже.
Вы могли бы даже избежать любого #include
и копировать и вставлять код, но это было бы очень плохой привычкой.
На практике, вставьте в заголовки все объявления, разделенные между более чем одним файлом, а также все необходимые #define
Покажите нам свой код, а также посмотрите на существующую практику (например, посмотрите на исходный код некоторого свободного программного обеспечения, написанного на C).
Нет, вам никогда не нужно ссылаться на файл C, чтобы связать файлы вместе. Вам нужно только #include заголовочные файлы. Однако убедитесь, что все нужные вам файлы находятся в одной папке. Хотите ли вы использовать #define в заголовочном файле или файл C, зависит от области действия. Если вы собираетесь использовать только определенные вами значения в main, тогда #define его в main, но если они будут использоваться в других файлах c, таких как определения функций, поместите их в заголовок. Просто будьте осторожны с тем, что вы уже определили.