1. 程式人生 > >錯誤:重複定義變數的解決辦法——不要在標頭檔案裡定義變數

錯誤:重複定義變數的解決辦法——不要在標頭檔案裡定義變數

在寫C程式碼的時候,經常需要在標頭檔案中包含有些預定義的資訊。比如一些結構體的宣告,外部變數,函式的宣告等。

有時候覺得有必要在標頭檔案中定義一些變數,這樣在原始檔中就不需要定義了。但是這樣做,有很大的問題。

比如

[cpp] view plain copy
//test.h
1 #ifndef _TEST_H
2 #define _TEST_H
3 int x;
4 const char *name = “hhcn”;
5 #endif
~

[cpp] view plain copy
//test.c
#include “test.h”

[cpp] view plain copy
//main.c
1 #include

相關推薦

錯誤重複定義變數解決辦法——不要檔案定義變數

在寫C程式碼的時候,經常需要在標頭檔案中包含有些預定義的資訊。比如一些結構體的宣告,外部變數,函式的宣告等。 有時候覺得有必要在標頭檔案中定義一些變數,這樣在原始檔中就不需要定義了。但是這樣做,有很大的問題。 比如 [cpp] view plain cop

關於SQL Server 2005 windows登陸模式無法登陸伺服器(錯誤18456)的解決辦法

由於系統經常重灌,每次安裝MS SqlServer2005也積累了不少經驗。 之前幾次無法連線資料庫往往是因為: 1.SQLSERVER的協議配置不正確,需要Named Pipes和TCP/IP 協議啟用並禁用VIA 2.外圍應用配置器中未啟用database服務 3.SqlServ

Windows Server 2003 FastCGI配置錯誤Error Number: 1413 解決辦法

錯誤: 開啟檔案C:\WINDOWS\system32\inetsrv\fcgiext.ini 在最後的[Types]後新增上 php=PHP [PHP] ExePath=C:\Program Files\PHP\php-cgi.exe InstanceMaxReques

[C語言專案]防止檔案和全域性變數重複定義

昨天下午將全域性變數定義在H檔案中導致連結時提示變數在多個obj檔案內重複。 解決辦法如下: 將變數移入C檔案中進行定義,然後在H檔案中加入extern在變數之前。 這樣當其它C檔案引用該全域性變數時就會去連結這個變數符號而不是重新生成。 另附防止H檔案被重複包含的處理方

不要檔案定義變數

在寫C程式碼的時候,經常需要在標頭檔案中包含有些預定義的資訊。比如一些結構體的宣告,外部變數,函式的宣告等。 有時候覺得有必要在標頭檔案中定義一些變數,這樣在原始檔中就不需要定義了。但是這樣做,有很大的問題。 比如 //test.h 1 #ifndef _TEST_H

C++檔案定義解決方式

C++由於標頭檔案重複包含了所定義的變數或者常量,編譯器就會報重複定義的錯誤。 可以通過以下幾種方式進行解決: 在標頭檔案加上防止重定義的巨集: #ifndef FileName_H_#defi

全域性變數檔案中“定義

        看著標題,定義上面加了一個引號,這個得注意了。怎麼解釋呢,一般而言,變數只能定義在.c檔案中,宣告變數才在.h檔案中。下面就打破常規,把定義變數的語句放在.h檔案中,但是對實際而言,變數定義在標頭檔案中是表面上的。         下面直接給出程式碼,有三個

c++在檔案定義全域性變數時需要注意的地方

我們知道,在 C++(但不是在 C 語言)中,const 限定符對預設儲存型別稍有影響。在預設情況下,全域性變數的連結性為外部的,但 const 全域性變數的連結性為內部的。也就是說,在 C++ 看來,全域性 const 定義就像使用了 static 說明符一樣。

C/C++語言在檔案定義全域性變數

轉載:http://blog.csdn.net/chenqiai0/article/details/8490665 全域性變數可不可以定義在可被多個.C檔案包含的標頭檔案中?為什麼? 可以,在不同的C檔案中以static形式來宣告同名全域性變數。標頭檔案中不可以直接定

檔案定義static靜態變數的利弊

對於儲存位置:靜態變數的效果和全域性變數的效果是一樣的,他們都儲存在全域性資料區。頻繁使用其實效率更高,如果定義的靜態變數不用,那就會浪費記憶體,因為全域性資料區生命週期是從程式執行到結束。 區域性變數:每次棧上都要為區域性變數分配空間,因此區域性變數太多

能不能在檔案定義全域性變數

首先,這是一篇科普文,所以 比較雜,我儘量寫清楚一些。 1、ANSI C標準是什麼?GNU又是什麼?ld是什麼? ANSI C是C語言的標準規範,是國際標準化組織制定的國際標準。 雖然 ANSI C規範了C語言的實現,但是在實際情況中,各家C語言提供商都會根據平臺的不

檔案只能放變數的宣告但是不能放定義

一般的做法都是在標頭檔案(.h)中宣告變數,然後在原始檔(.c)中定義變數 如果在標頭檔案中定義變數,這個變數就有了實體,如果a.c和b.c一起引用了標頭檔案head.h,就等於同時建立了兩個同樣名字

為什麼inline函式應該在檔案定義?【轉】

(轉自:https://blog.csdn.net/ronnie_hu/article/details/62238311) inline函式(即行內函數)對編譯器而言必須是可見的,以便能夠在呼叫點展開該函式,與非inline函式不同的是,inline函式必須在呼叫該函式的每個檔案中定義。當然,對

C語言檔案定義

每個C++/C程式通常由標頭檔案(header files)和定義檔案(definition files)組成。標頭檔案作為一種包含功能函式、資料介面宣告的載體檔案,主要用於儲存程式的宣告(declaration),而定義檔案用於儲存程式的實現 (implementation)。 .c就是你寫的程式

C++ 檔案isalpha、islower、isupper、isalnum、isblank、isspace函式

1.isalpha isalpha()用來判斷一個字元是否為字母,如果是字元則返回非零,否則返回零。 cout << isalpha('a');//返回非零 cout << isalpha('2');//返回0 2.isalnum isal

關於字元驅動中的變數,巨集,檔案等的簡介 module_init module_exit

  ssize_t second_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) { } 這是一個檔案讀函式  ssize_t是signed size_t,size_t是標準C庫中定義的

c++模板類的成員函式的宣告與定義應該放在檔案

    今天嘗試自己實現vector資料結構底層,在定義vector模板類的時候,還想像往常一樣把類分為.h檔案和.cpp檔案,把成員函式的宣告放在.h檔案中,把具體實現放在.cpp檔案中,結果在測試時發現在編譯過程中報錯。除錯了很久,重視提示“無法解析的外部符號”,如圖所示

C 語言的變數作用域及檔案

下面再介紹另一種分類形式:它分為程式碼塊作用域和檔案作用域。程式碼塊作用域和檔案作用域也有另一種分類方法,區域性作用域和全域性作用域。 程式碼塊作用域:程式碼塊是指一對花括號之間的程式碼,函式的形參雖然是在花括號前定義但也屬於程式碼作用域。在C99中把程式碼塊的概念擴大到包括由for迴圈、while迴圈、d

codeblock無法編譯,提示函式沒有定義,但是函式已經 在檔案定義

你在新增檔案時沒有選中Targets。預設情況下,一個工程會有兩個Targets,一個叫Debug,一個叫Release,前者可以除錯,用於開發。後者不能除錯,用於生成最終釋出的軟體。CodeBloc

為什麼inline函式應該在檔案定義

inline函式(即行內函數)對編譯器而言必須是可見的,以便能夠在呼叫點展開該函式,與非inline函式不同的是,inline函式必須在呼叫該函式的每個檔案中定義。當然,對於同一程式的不同檔案,如果inline函數出現的話,其定義必須相同。 正因為如此,建議把