在程序中,若某一变量被多处使用,有时需要将其放在代码的最上方或最下方,作为全局变量或局部变量,以方便统一管理和使用。但是,若该变量所属的变量段(如.data、.bss等)被放置在了不同的位置,会出现编译链接错误“multiple definition of ”该变量名“”,因为在不同的位置上出现了同名的变量段。 为避免这样的错误,可以在代码中使用特殊的编译指令#pragma data_seg和#pragma comment(linker,...)来实现将变量段放在指定的位置上。代码示例如下:
// 定义变量段DATA1,在代码段后面的数据段上分配空间 #pragma data_seg(".mydata") int var1 = 1; char str[]="Data Seg"; #pragma data_seg()
// 定义变量段DATA2,在程序的只读区域(.rdata)上分配空间 #pragma data_seg(".rdata") char str2[]="Read Only"; #pragma data_seg()
// 链接时,将mydata段与其他段分离 #pragma comment(linker, "/section:.mydata,RWS")
// main函数 int main() { printf("%s: %d\n", str, var1); printf("%s\n", str2); return 0; }
在该示例中,使用#pragma data_seg将变量str、var1定义在mydata段中,str2定义在rdata段中;并在链接时,将mydata段与其他段分离,以避免冲突。
上一篇:变量都是“未定义”的。
下一篇:变量对象构造函数