① 關於c語言的介面問題
autorun!注冊表!
你Y想寫病毒吧
② C語言WINDOWS編程只能用API嗎
呵呵,C語言的編程思想非常值得學習,另外說明一下api只是介面,不管那種開發語言都有api這部分,另外做C語言開發不會沒有前途的,而且能學好C學其他語言不然的,或者可以轉做C++開發,另外再linux下面又很多C++開發工具的(C語言可以用C++開發工具,這個你應該懂的)。
③ C語言中的介面如何實現它和函數的定義有啥區別,請C高手來指導,杜絕Java的介面和類的回答因為我精通JAVA
C語言中介面和函數其實沒什麼差別,只是有些人的習慣問題,不過一叫介面的都是針對某一個模塊的功能函數集合,像一個圖片採集模塊一般就會有三種方式,1、頭文件和.c文件;2、頭文件和.so動態庫;3、頭文件和.a靜態庫。在進行程序編寫時我們要添加頭文件,在進行編譯時,必須加入,該模塊的.c或.so或.a,一種就行。
一般我們編寫小函數介面,一般需要一個.h和一個.c就行了。函數的聲明都是在.h中,實現都在.c中,當模塊編寫.c有點大時,我們可以為了編譯時的速度,把.c文件編譯成.so和.a。
//hello.h
#ifndef _HELLO_H_
#define _HELLO_H_
//#define 宏定義也應該在這
#include <stdio.h>
void hello();
#endif
//hello.c
#inlcude "hello.h"
void hello() {
printf("Hello word!");
}
大概就是這樣,只不過我是linux下的,函數介面定義大同小異吧
④ C語言介面的定義與實現
一個模塊有兩部分組成:介面和實現。介面指明模塊要做什麼,它聲明了使用該模塊的代碼可用的標識符、類型和常式,實現指明模塊是如何完成其介面聲明的目標的,一個給定的模塊通常只有一個介面,但是可能會有許多種實現能夠提供介面所指定的功能。每個實現可能使用不同的演算法和數據結構,但是它們都必須符合介面所給出的使用說明。客戶調用程序是使用某個模塊的一段代碼,客戶調用程序導入介面,而實現導出介面。由於多個客戶調用程序是共享介面和實現的,因此使用實現的目標代碼避免了不必要的代碼重復,同時也有助於避免錯誤,因為介面和實現只需一次編寫和調試就可多次使用
實現
一個實現導出一個介面,它定義了必要的變數和函數以提供介面所規定的功能,在C語言中,一個實現是由一個或多個.c文件提供的,一個實現必須提供其導出的介面所指定的功能。實現應包含介面的.h文件,以保證它的定義和介面的聲明時一致的。
Arith_min和Arith_max返回其整型參數中的最小值和最大值:
int Arith_max(int x, int y) {
return x > y ? x : y;
}
int Arith_min(int x, int y) {
return x > y ? y : x;
}
Arith_div返回y除以x得到的商,Arith_mod返回相應的余數。當x與y同號的時候,Arith_div(x,y)等價於x/y,Arith_mod(x,y)等價於x%y
當x與y的符號不同的時候,C的內嵌操作的返回值就取決於具體的實現:
eg.如果-13/5=2,-13%5=-3,如果-13/5=-3,-13%5=2
標准庫函數總是向零取整,因此div(-13,2)=-2,Arith_div和Arith_mod的語義同樣定義好了:它們總是趨近數軸的左側取整,因此Arith_div(-13,5)=-3,Arith_div(x,y)是不超過實數z的最大整數,其中z滿足z*y=x。
Arith_mod(x,y)被定義為x-y*Arith_div(x,y)。因此Arith_mod(-13,5)=-13-5*(-3)=2
函數Arith_ceiling和Arith_floor遵循類似的約定,Arith_ceiling(x,y)返回不小於實數商x/y的最小整數
Arith_floor(x,y)返回不超過實數商x/y的最大整數
完整實現代碼如下:
arith.c
抽象數據類型
抽象數據類型(abstract data type,ADT)是一個定義了數據類型以及基於該類型值提供的各種操作的介面
一個高級類型是抽象的,因為介面隱藏了它的表示細節,以免客戶調用程序依賴這些細節。下面是一個抽象數據類型(ADT)的規范化例子--堆棧,它定義了該類型以及五種操作:
stack.h
實現
包含相關頭文件:
#include <stddef.h>
#include "assert.h"
#include "mem.h"
#include "stack.h"
#define T Stack_T
Stack_T的內部是一個結構,該結構有個欄位指向一個棧內指針的鏈表以及一個這些指針的計數:
struct T {
int count;
struct elem {
void *x;
struct elem *link;
} *head;
};
Stack_new分配並初始化一個新的T:
T Stack_new(void) {
T stk;
NEW(stk);
stk->count = 0;
stk->head = NULL;
return stk;
}
其中NEW是一個另一個介面中的一個分配宏指令。NEW(p)將分配該結構的一個實例,並將其指針賦給p,因此Stack_new中使用它就可以分配一個新的Stack_T
當count=0時,Stack_empty返回1,否則返回0:
int Stack_empty(T stk) {
assert(stk);
return stk->count == 0;
}
assert(stk)實現了可檢查的運行期錯誤,它禁止空指針傳給Stack中的任何函數。
Stack_push和Stack_pop從stk->head所指向的鏈表的頭部添加或移出元素:
void Stack_push(T stk, void *x) {
struct elem *t;
assert(stk);
NEW(t);
t->x = x;
t->link = stk->head;
stk->head = t;
stk->count++;
}
void *Stack_pop(T stk) {
void *x;
struct elem *t;
assert(stk);
assert(stk->count > 0);
t = stk->head;
stk->head = t->link;
stk->count--;
x = t->x;
FREE(t);
return x;
}
FREE是另一個介面中定義的釋放宏指令,它釋放指針參數所指向的空間,然後將參數設為空指針
void Stack_free(T *stk) {
struct elem *t, *u;
assert(stk && *stk);
for (t = (*stk)->head; t; t = u) {
u = t->link;
FREE(t);
}
FREE(*stk);
}
完整實現代碼如下:
#include <stddef.h>
#include "assert.h"
#include "mem.h"
#include "stack.h"
#define T Stack_T
struct T {
int count;
struct elem {
void *x;
struct elem *link;
} *head;
};
T Stack_new(void) {
T stk;
NEW(stk);
stk->count = 0;
stk->head = NULL;
return stk;
}
int Stack_empty(T stk) {
assert(stk);
return stk->count == 0;
}
void Stack_push(T stk, void *x) {
struct elem *t;
assert(stk);
NEW(t);
t->x = x;
t->link = stk->head;
stk->head = t;
stk->count++;
}
void *Stack_pop(T stk) {
void *x;
struct elem *t;
assert(stk);
assert(stk->count > 0);
t = stk->head;
stk->head = t->link;
stk->count--;
x = t->x;
FREE(t);
return x;
}
void Stack_free(T *stk) {
struct elem *t, *u;
assert(stk && *stk);
for (t = (*stk)->head; t; t = u) {
u = t->link;
FREE(t);
}
FREE(*stk);
}
⑤ C語言中的介面是什麼它和抽象類有什麼區別
1、在C語言中,或者說所有的編程語言中,介面就是Application
Programming
Interface(API)的中文說法,即一些預先定義的函數,目的是提供應用程序與開發人員基於某軟體或硬體得以訪問一組常式的能力,而又無需訪問源碼,或理解內部工作機制的細節。
在C語言中,介面就是函數。
2、實現一組函數供別人使用,就是提供介面;
使用別人提供的函數,就是調用介面。
C語言的庫函數,比如printf,scanf等,都是介面的一種。
⑥ C語言是怎樣控制介面的這要用到什麼庫嗎
如果是電腦程序的話,譬如你在vc6.0裡面c語言裡面編寫一個程序,那麼vc6裡面的編譯器會把你的c語言語句按照對應的關系翻譯成你計算機能識別的計算機語句,然後你電腦cpu會按照這些指令來控制你的硬碟,內存讀寫之類的硬體操作。 如果是單片機之類的話,譬如你在keil裡面用c語言編寫了一個單片機程序,那麼keil的編譯器會把你的c語言程序編寫成匯編語言程序文件,然後把那個匯編程序文件燒到單片機晶元上就可以讓晶元按照指令工作了。
⑦ c語言如何實現介面功能
一般是在庫文件裡面定義介面標志符及對介面的讀寫程序。必要時可以用匯編語言寫。在用戶程序中,調用這些函數即可。有的CPU指令系統統一通過中斷程序訪問介面。
⑧ C語言介面是什麼意思
在C語言中,或者說所有的編程語言中,介面就是Application Programming Interface(API)的中文說法,即一些預先定義的函數,目的是提供應用程序與開發人員基於某軟體或硬體得以訪問一組常式的能力,而又無需訪問源碼,或理解內部工作機制的細節。
在C語言中,介面就是函數。
實現一組函數供別人使用,就是提供介面;
使用別人提供的函數,就是調用介面。
C語言的庫函數,比如printf,scanf等,都是介面的一種。
⑨ c語言函數介面實現
int add(int a, int b) {
return a+b;
}
2.求乘積:
int multiply(int a, int b) {
return a*b;
}
3.求商:
int divide(int a, int b) {
return a/b;
}
4.求差:
int sub(int a, int b) {
return a-b;
}
⑩ C語言 用戶介面
我去年做的
#include<time.h>
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#define MAX 50
void input();
void sort();
void display();
void insert();
void del();
void average();
int now_no=0;
struct student
{
int no;
char name[20];
char sex[4];
float score1;
float score2;
float score3;
float sort;
float ave;
float sum;
};
struct student stu[MAX],*p;
main()//主函數
{
char as;
start: printf("\t\t\t歡迎使用學生成績管理系統\n\n");
//一下為功能選擇模塊
do{
printf("\n\t\t\t\t1.錄入學員信息\n\t\t\t\t2.顯示學員信息\n\t\t\t\t3.成績排序信息\n\t\t\t\t4.添加學員信息\n\t\t\t\t5.刪除學員信息\n\t\t\t\t6.退出\n");
printf("\t\t\t\t選擇功能選項:");
as=getch();
switch(as)
{
case '1':
system("cls");
input();
break;
case '2':
system("cls");
display();
break;
case '3':
system("cls");
sort();
break;
case '4':
system("cls");
insert();
break;
case '5':
system("cls");
del();
break;
case '6':
system("exit");
exit(0);
default:
system("cls");
goto start;
}
}while(1);
//至此功能選擇結束
}
void input()//原始數據錄入模塊
{
int i=0;
char ch;
do
{
printf("\t\t\t\t1.錄入學員信息\n輸入第%d個學員的信息\n",i+1);
printf("\n輸入學生編號:");
scanf("%d",&stu[i].no);
fflush(stdin);
printf("\n輸入學員姓名:");
fflush(stdin);
gets(stu[i].name);
printf("\n輸入學員性別:");
fflush(stdin);
gets(stu[i].sex);
printf("\n輸入學員成績:");
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\n輸入學員成績:");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n輸入學員成績:");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n\n");
i++;
now_no=i;
printf("%d",now_no);
printf("是否繼續輸入?(Y/N)");
ch=getch();
system("cls");
}
while(ch!='n');
system("cls");
}
void sort()//排序數據函數
{
struct student temp;
int i,j;
for(i=1;i<now_no;i++)
{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].ave<stu[j].ave)
{temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}}}
}
void display()//顯示數據函數
{
int i;
char as;
float ave;
do
{
printf("\t\t班級學員信息列表\n");
printf("\t編號\t姓名\t性別\t成績\t成績\t成績\t平均值\n");
for(i=0;i<now_no;i++)
{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3;
stu[i].ave=stu[i].sum/3;
printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave);
}
printf("\t\t按任意鍵返回主菜單.");
as=getch();
goto exit;
}
while(as!='n');
exit: system("cls");
}
void insert()//插入數據函數
{
char ch;
do
{
printf("\n\t\t輸入新插入學員隊信息\n");
printf("\n輸入學生編號:");
scanf("%d",&stu[now_no].no);
fflush(stdin);
printf("\n輸入學員姓名:");
fflush(stdin);
gets(stu[now_no].name);
printf("\n輸入學員性別:");
fflush(stdin);
gets(stu[now_no].sex);
printf("\n輸入學員成績:");
fflush(stdin);
scanf("%f",&stu[now_no].score1);
printf("\n輸入學員成績:");
fflush(stdin);
scanf("%f",&stu[now_no].score2);
printf("\n輸入學員成績:");
fflush(stdin);
scanf("%f",&stu[now_no].score3);
printf("\n\n");
now_no=now_no+1;
sort();
printf("是否繼續輸入?(Y/N)");
ch=getch();
system("cls");
}
while(ch!='n');
}
void del()//刪除數據函數
{
int inum,i,j;
printf("輸入要刪除學員的編號:");
fflush(stdin);
scanf("%d",&inum);
for(i=0;i<now_no;i++)
{
if(stu[i].no==inum)
{
for(j=i;j<now_no;j++)
{
stu[i]=stu[i+1];
}
now_no=now_no-1;
}
break;
}
system("cls");
}