C語言通過.h標頭檔案引入自己寫的源程式

發表於2019-03-02

通過.h引入自定義函式

1.在get_line.h檔案中宣告並定義函式,如下:

#include <stdio.h>

#define MAXLEN 1000

int m_getline(char line[]){
	/* 輸入字串,返回陣列長度 */
	int c,i;
	for (i = 0; i < MAXLEN && (c = getchar()) != EOF; ++i)
	{
		line[i] = c;
	}
	line[i] = '\0';
	return i;
}
  1. 在另一個檔案如p_1_18.c中,通過#include引入
#include <stdio.h>
#include "get_line.h"

#define MAXLEN 1000

/* 練習1-18 刪除行末尾的空格及製表符,並刪除空格行 */
int get_line_no_space(char line[], int len){
	int i;
	for (i = len-1; i >= 0; --i)
	{
		if (line[i] != '\t' && line[i] != ' ')
		{
			line[i] = '\0';
			break;
		}
	}
	if( i <= 0)
		printf("delete space line \n");
	return i;	/* 返回剩餘長度 */
}

void main(){
	char line[MAXLEN];
	int len;
	len = m_getline(line);
	get_line_no_space(line,len);
	printf("%s\n", line);
}
  1. 然後編譯執行p_1_18.c即可。通過#include引入,其實是將 被引入檔案內容,新增到當前源程式中

之前,想通過將 函式宣告放在xx.h中,內容如下:

#ifndef GET_LINE_H
#define GET_LINE_H

int m_getline(char line[]);

#endif

然後在同資料夾下建立同名xx.c檔案,在其中實現該函式:

#include <stdio.h>

#define MAXLEN 1000

int m_getline(char line[]){
	/* 輸入字串,返回陣列長度 */
	int c,i;
	for (i = 0; i < MAXLEN && (c = getchar()) != EOF; ++i)
	{
		line[i] = c;
	}
	line[i] = '\0';
	return i;
}

最後如上一樣在p_1_18.c中 #include “get_line.h”,呼叫m_getline函式,卻無法通過編譯:無法找到對m_getline的引用。不知道這個問題怎麼解決,如有知道的博友,請不吝賜教。

相關文章