C 语言能不能在头文件定义全局变量?

可以,但一般不会将全局变量的定义写在头文件中。

因为如果多个 C 源文件都添加了头文件,很容易引起重定义的问题。这时候一般编译器都会提示:“multiple definition of... first defined here” 错误。

正确的作法是在 C 源文件中定义一个全局变量,并在对应的头文件中添加该变量的声明。例如:

  //var.c 一个主要用于定义全局变量的c源文件

    int g_a;

    char g_x;

  //var.h 用于声明定义的全局变量

    extern int  g_a;

    extern char g_x; 

  //test.c 一个用于测试的头文件

    #include <var.h>

    void f()

    {

      g_a = 1;

      g_x = ‘x‘;

    }

原文地址:https://www.cnblogs.com/dhqy/p/9510802.html

时间: 2024-08-27 14:20:36

C 语言能不能在头文件定义全局变量?的相关文章

头文件定义全局变量等问题 (转载)

全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 可以,在不同的C文件中以static形式来声明同名全局变量.头文件中不可以直接定义变量和函数,但是可以定义static变量 ,类. extern 用法,全局变量与头文件(重复定义) 用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx.h包含了a的声明)不就可以了么,为什么还要用extern呢??这个

头文件定义全局变量等问题

全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 可以,在不同的C文件中以static形式来声明同名全局变量.头文件中不可以直接定义变量和函数,但是可以定义static变量.类. extern用法,全局变量与头文件(重复定义) 用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h>(xxx.h包含了a的声明)不就可以了么,为什么还要用extern呢??这个问题一

头文件定义

头文件定义 1 #include <string> 2 #include <vector> 3 #include <algorithm> 4 #include <numeric> 5 #include <set> 6 #include <map> 7 #include <queue> 8 #include <iostream> 9 #include <sstream> 10 #include <

&lt;climits&gt;头文件定义的符号常量

<climits>头文件定义的符号常量 CHAR_MIN  char的最小值 SCHAR_MAX  signed char 最大值 SCHAR_MIN   signed char 最小值 UCHAR_MAX  unsigned char 最大值 SHRT_MAX  short 最大值 SHRT_MIN short 最小值 USHRT_MAX unsigned short 最大值 INT_MAX int 最大值 INT_MIN  int 最小值 UINT_MAX  unsigned int 最大

C/C++:多个.cpp文件包含同一个.h头文件定义方法

本文解决multiple definition of `XX'的错误.[出于反爬虫的目的,你不是在http://blog.csdn.net/zhanh1218上看到的,肯定不是最新最全的.] 关于头文件的定义中,请一定加上以下代码(此为头文件保护符): <span style="font-size:14px;"><span style="font-size:12px;">#ifndef PERSON_H_ #define PERSON_H_

cctype 头文件定义函数

header <cctype> (ctype.h) Character handling functions This header declares a set of functions to classify and transform individual characters. Functions These functions take the int equivalent of one character as parameter and return an int that ca

【酷熊科技】工作积累 ----------- Unity3D / c 语言 使用 Stringbuilder 引用头文件 using System.Text

使用 StringBuilder Unity3D / c 语言 使用 Stringbuilder 引用头文件 using System.Text 简述StringBuilder和String的区别? String是字符串常量.  StringBuffer是字符串变量 ,线程安全. StringBuilder是字符串变量,线程不安全.  String类型是个不可变的对象,当每次对String进行改变时都需要生成一个新的String对象,然后将指针指向一个新的对象,如果在一个循环里面,不断的改变一个

C/C++:多个.cpp文件包括同一个.h头文件定义方法

本文解决multiple definition of `XX'的错误.[出于反爬虫的目的,你不是在http://blog.csdn.net/zhanh1218上看到的,肯定不是最新最全的.] 关于头文件的定义中,请一定加上下面代码(此为头文件保护符): <span style="font-size:14px;"><span style="font-size:12px;">#ifndef PERSON_H_ #define PERSON_H_

C语言 文件操作的头文件

计算机文件是以计算机硬盘为载体存储在计算机上的信息集合,是存储在某种长期储存设备上的一段数据流.在C语言中用一个指针变量指向一个文件,这个指针称为文件指针.通过文件指针就可对它所指的文件进行各种操作,C语言规定该文件指针类型为FILE型.文件的信息有这个FILE型的结构体来进行定义. FILE的结构体的定义如下 typedef struct { short level; // 缓冲区“满”或“空”的程度 unsigned flags; // 文件状态标志 char fd; // 文件描述符 un