為什麼要在頭文件中進行變數聲明
Ⅰ C++中在頭文件里定義的變數的作用范圍是什麼
根據頭文件中變數的定義形式,作用范圍有所不同,有如下幾種情況:
1 在頭文件中定義靜態變數,如
static TYPE var = init_value;
其中= init_value部分可以省略。
等效於在每個引用該頭文件的源文件中,定義一個變數名為var, 類型為TYPE的靜態全局變數。每個文件中的var變數均歸屬於本源文件,各文件中的互不相同。
作用域為引用頭文件的源文件范圍內。
2 在頭文件中定義變數,但是不帶初始化值。
TYPE var;
這種情況下,相當於定義了一個全局變數var, 同時在所有引用該頭文件的源文件中聲明。
其作用域為整個項目的所有源文件。
在引用了該頭文件的源文件中可以直接使用var, 在沒有引用該頭文件的源文件中,可以通過
extern TYPE var;
進行聲明,從而使用var。
3 在頭文件中定義了帶初始化值的變數。
TYPE var = init_value;
當項目中,只有一個源文件中引用了該頭文件時,等同於在源文件中定義了這個全局變數,可在該文件中使用var。 在其它源文件中可以通過
extern TYPE var;
進行聲明,從而使用var。所以這種情況下變數的作用域也是整個項目。
需要注意的是,這種形式一旦在超過一個源文件中引用該頭文件,則會按照在不同文件中定義同名全局變數處理,這時會編譯出錯,自然也就沒有作用域的說法了。
Ⅱ 頭文件中聲明變數
變數和函數聲明都是正確的
#include <stdio.h>放在main.cpp裡面
#include <stdio.h>是一個已經定義好的庫文件,放在main.cpp裡面表示你在主函數裡面用到這個庫的函數,所以不需要放在頭文件裡面。
Ⅲ c語言中不是說靜態全局變數的作用域是在本文件中,但是為什麼在頭文件中定義了靜態全局變數
你說的對的,但是沒有深刻理解,你將變數定義放在頭文件中,使用時#include,在C預處理時相當於直接將其內容到*.c文件中,就相當於在每個*.c 文件中 加上了 static int x = ...; 這難道還是同一個變數嗎?這里就體現了static的防止變數重名的作用。
當然可以了!地址當然不一樣了!
假如在1.c 中 全局 static int a = 1; 在 2.c中當然不可調用,這就是你說的作用域的問題。
一般的話不會再頭文件中定義變數的。頭文件中存放聲明 結構體原型、宏定義等,不會佔用空間。
static 加在函數前也是這個道理。
還有 假如你1.c中的fun函數調用了 static a , 但是函數前沒有加上static那麼可以直接在
2.c中去調用 fun函數。
這么說,你明白了嘛?
Ⅳ C++書上寫的是不能把變數定義在頭文件中,頭文件只能用來聲明,為什麼MFC中把變數都定義在頭文件中
那隻是建議,並不是絕對的
通常情況頭文件是只存放聲明,而.cpp文件存放定義
但也有例外,比如模板類。
如果頭文件中存放變數的定義,而其他多個cpp文件包含了這個頭文件,可能會導致該變數被重復定義而出現鏈接錯誤
Ⅳ C語言中,聲明變數和初始化變數有什麼作用
c語言中,變數只有先聲明,才能使用,這樣避免編程時產生不必要的錯誤,一位不同類型變數的存儲格式和長度都不同,所以位元組長度不同,聲明變數可以讓計算機知道你更需要用什麼樣的格式存儲變數,從而高效穩定地運行程序。
C語言包含的各種控制語句僅有9種,關鍵字也只有32 個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。實際上,語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故c語言擁有非常簡潔的編譯系統。
(5)為什麼要在頭文件中進行變數聲明擴展閱讀:
C語言是面向過程的編程語言,用戶只需要關注所被解決問題的本身,而不需要花費過多的精力去了解相關硬體,且針對不同的硬體環境,在用C語言實現相同功能時的代碼基本一致,不需或僅需進行少量改動便可完成移植,這就意味著,對於一台計算機編寫的C程序可以在另一台計算機上輕松地運行,從而極大的減少了程序移植的工作強度。
與其他高級語言相比,C語言可以生成高質量和高效率的目標代碼,故通常應用於對代碼質量和執行效率要求較高的嵌入式系統程序的編寫。
Ⅵ 在程序中我們使用一個變數前為什麼要進行聲明
為了叫系統承認這個和知道這個變數的基本狀態,以便下面運用\運算.否則就是非法的