Я уже некоторое время читал о С и решил написать небольшую программу для добавления, ничего необычного. Мое понимание заголовков C является то, что они являются «интерфейсы» (например, как Java и других языках), но где вы можете также определить переменную, либо установили значения или нет ..Файлы заголовков в C
Так что я написал это:
#include <stdio.h>
#include <stdlib.h>
#include "sample.h"
int main(int argc, char** argv) {
printf("hello World\n");
add(12, 18);
return (EXIT_SUCCESS);
}
int add(int a, int b){
int value = a+b;
printf("value = %d\n", value);
return 0;
}
Он имеет заголовочный файл, который выглядит, как например:
#ifndef SAMPLE_H_GUARD
#define SAMPLE_H_GUARD
int add(int a, int b);
#endif
Я думал, файлы заголовков, и это, где я потерял по их определению, было предположить, чтобы определить использование оных, так что все у меня будет для этого нужно добавить add - По моему мнению, я определяю правила добавления, а затем выполнения t функциональность add ....
Кроме того, много материала, который я прочитал, показывает один заголовочный файл для нескольких файлов C. где у многих проектов сегодня есть один заголовок за один c, то есть Sample.h принадлежит Sample.c и ничего больше.
Может ли кто-нибудь пролить свет на это?
Мог ли я сделать это так:
main.c
#include <stdio.h>
#include <stdlib.h>
#include "sample.h"
int main(int argc, char** argv) {
printf("hello World\n");
add(12, 18);
return (EXIT_SUCCESS);
}
add.c
#include <stdio.h>
#include <stdlib.h>
#include "sample.h"
int add(int a, int b){
int value = a+b;
printf("value = %d\n", value);
return 0;
}
sample.h
#ifndef SAMPLE_H_GUARD
#define SAMPLE_H_GUARD
int add(int a, int b);
#endif
Я верю в книгу, которую я читал: C Programming Language У них был пример калькулятора, разбитый таким образом, мой вопрос в том, как C знает, где указано add? Он знает правила для него, основываясь на файле заголовка, я думаю, но не там, где фактическая реализация есть ....
Там пример, где они разбивают файлы вроде таких, что у них нет что-то вроде #include "add.c"
все, что они делают включить файл заголовка в файлы, которые реализуют или используют эту функциональность.
Примечание: Очевидно, что пример калькулятора и мой пример будут разными, но в принципе одинаковыми - для тех, у кого есть книга. Я просто потерял возможность эффективно и эффективно использовать файлы заголовков.
Линкер беспокоится о поиске определения. – krsteeve
Вы, как программист, должны сообщить компоновщику, какие объектные файлы и библиотеки должны быть связаны, а также между объектными файлами и библиотеками, вы должны убедиться, что каждая функция или переменная, на которую ссылаются объектные файлы, также где-то определена (другой объект файла или библиотеки). Если у вас нет нескольких исходных файлов, заголовки типа 'sample.h' на самом деле не нужны - в первом примере вы можете сделать' add() 'в статической функции, объявленной в верхней части' main.c', и реализованы на дно. –