外部定義c語言,c語言不是內部或外部

本文目錄一覽:

C語言 在外部定義結構類型?

這樣做是不對的

應該這樣:

文件str.h

struct STR

{

int a;

int b;

}; //注意這裡不要聲明變數

文件str.cpp

#include “str.h”

struct STR str; //在這裡聲明

文件main.cpp

#include stdio.h

#include “str.h”

extern struct STR str; //這樣就可以引用外部變數了

int main(void)

{

str.a = 8;

return 0;

}

總結:

1、#include只引用頭文件,不要引用程序文件

2、#include只聲明類型,不要聲明變數,因為多次引用會對同一變數多次分配內存,是錯誤的重複定義;

3、變數定義必須放在程序體文件,這樣在其他程序體只要聲明extern就可以引用了

C語言如何定義外部結構體?

把這個結構體放在一個.h文件中。其他c文件引用這個.h文件。

type.h

#ifndef type_h

#define type_h

struct ABC

{unsigned a;

unsigned b;

}abc;

#endif

qita.c

#include “type.h”

int main(){

abc.a=6;

}

有關C語言的內部函數和外部函數的定義說明

有兩種理解.(1)庫函數是C語言的內部函數或自帶函數,外部函數即程序員自定函數.

(2)凡加寫了extern 的函數是外部函數.

第一種理解好懂:

C語言的內部函數指的是C語言自帶的函數,無論是動態鏈接的或靜態鏈接的. 這些函數通過C語言的頭文件定義了.

例如, sin(),cos()等數學函數,在math.h中定義了,輸入輸出函數 printf(),fgetc()在stdio.h中定義了,時間函數表time(),ctime()等在time.h中定義了.還有許多其他內部函數.編程時,只要用#include 庫名.h寫在編程頭部,程序中就可調用.

自定義函數,就是用戶自己寫的函數.

第二種凡加寫了extern 的函數是外部函數:

自定義函數可以與程序的main()寫在同一個文件中,也可以寫在另一個文件中,這時你可能還另寫自己的頭文件或者寫extern….,告訴編譯器,main中用到的某某函數是”外部函數”.

例如,main()在a.c中,自定義函數my_func()在a2.c中

a.c內容:

#include stdio.h

extern float my_func(float a);

main()

{

printf(“result=%f\n”,my_func(2.0));

}

a2.c 內容:

float my_func(float a)

{

return a;

}

編譯:

cl -c a.c [得到a.obj]

cl -c a2.c [得到a2.obj]

cl a.obj a2.obj [鏈接成a.exe]

運行:

a.exe

result=2.000000

extern float my_func() 是外部說明,告訴編譯,main()里的my_func是外部函數,要通過鏈接(.obj)得到.

如果把my_func寫在a.c里:

#include stdio.h

float my_func(float a){

retun a;

}

main()

{

printf(“result=%f\n”,my_func(2.0));

}

my_func() 就不是外部函數.

編譯:

cl a.c [得a.exe]

運行:

a.exe

result=2.000000

c語言 靜態變數和寄存器變數可以定義外部變數嗎?定義有什麼條件

static修飾函數:

在修飾非成員函數時表示該函數不是全局函數,而僅供本文件使用;

在修飾成員函數時,表示該函數只能調用類的靜態成員變數並且該方法可以不必經由實例化的類對象就能夠應用;

static修飾變數:

修飾全局變數時,該變數只能供本文件內部使用;

修飾成員變數時,該變數成為類變數,存儲在靜態存儲區中,不經過類實例就可以訪問該變數;

修飾局部變數時,該變數在函數第一次被調用時初始化,並將其存放到靜態存儲區,函數退出後變數值保持不變,下一次進入函數時將跳過對它的初始化,它的生命周期直到程序退出。

最後,要說明的是,static變數在全局中只有一份,不會有多份拷貝。

extern用於聲明變數時,如果不指出變數的類型,則默認為int,如果不是int的,必須顯示指出變數的類型,否則出錯。

extern實際上只對變數有用,對函數而言,只是個幌子(能夠更加清晰明了的讓我們知道也讓編譯器知道該函數可以用於「外交」),沒有實質性的作用,以後記住了,看到extern和函數扯上關係,你理都不用理,直接把它拿掉就OK了。但是它還是有那麼一點用的,既然「存在的就是合理的」,那麼它必然有點用啦,利用它可以在程序中取代include 「*.h」來聲明函數,在一些複雜的項目中,我比較習慣在所有的函數聲明前添加extern修飾。

本質上,我認為,函數可以將聲明和定義分開,而變數就不行了,因此只能藉助於extern來實現這一點,要是變數也能將聲明和定義分開,或許extern根本就不該活在這個世上。

extern可以被寫在變數/函數的聲明/定義處,但是標準的用法應該只是將其寫在聲明處,寫在定義處只不過為了再次強調或直觀明了而已。

C語言中如何申明外部定義的結構體數據。

方法一:文件包含

//a.c

#includestdio.h

#includestdlib.h

#include”c.c”

main()

{

int b;

g-v=1;

b=a(1);

printf(“%d”,g-v);

}

//c.c

#includestdio.h

int a(int x)

{

printf(“%d”,x);

return 0;

}

方法2;頭文件

//a.c

#includestdio.h

#includestdlib.h

#include “b.h”

main()

{

int b;

g-v=1;

b=a(1);

printf(“%d”,g-v);

}

//b.h定義一個頭文件

int a(int x);

struct gg;

//c.c

#includestdio.h

int a(int x)

{

printf(“%d”,x);

return 0;

}

struct gg

{

int v;

}*g;

方法3:外部變數

//c.c

#includestdio.h

extern b

typedef struct gg

{

int v;

}b,*g;

C語言關於外部變數聲明與定義

不要在共同include的頭文件里定義。

把變數定義在其中一個C文件又或者只有它才用的頭文件里。例如

int share;

然後在其他要用的C文件中使用

extern int share;

來聲明。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/180260.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-22 05:11
下一篇 2024-11-22 05:12

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python中的隊列定義

    本篇文章旨在深入闡述Python中隊列的定義及其應用,包括隊列的定義、隊列的類型、隊列的操作以及隊列的應用。同時,我們也會為您提供Python代碼示例。 一、隊列的定義 隊列是一種…

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變數、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python編程技巧:如何定義一個函數n!,並計算5!

    在這篇文章中,我們將研究如何使用Python編程語言定義一個能夠計算階乘的函數,並且演示如何使用該函數計算5!。 一、階乘函數的定義 在Python中,我們可以使用一個簡單的遞歸函…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29

發表回復

登錄後才能評論