Pragma预处理指令

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  有时,程序中会有些函数会使编译器发出你熟知而想忽略的警告,如“Parameter  xxx  is  never  used  in  function  xxx”,可以这样:

  #pragma  warn  —100            //  Turn  off  the  warning  message  for  warning  #100

  int  insert_record(REC  *r)

  {  /*  function  body  */  }

  #pragma  warn  +100                        //  Turn  the  warning  message  for  warning  #100  back  on

  函数会产生一条有唯一特征码100的警告信息,如此可暂时终止 该警告。

  每个编译器对#pragma的实现不同,在一个编译器中有效在别的编译器中几乎无效。可从编译器的文档中查看。

  用#pragma data_seg建立一个新的数据段并定义共享数据,其具体格式为:

  #pragma data_seg ("shareddata")

  HWND sharedwnd=NULL;//共享数据

  #pragma data_seg()

  1,#pragma data_seg()一般用于DLL中。也就是说,在DLL中定义一个共享的,有名字的数据段。最关键的是:这个数据段中的全局变量可以被多个进程共享。否则多个进程之间无法共享DLL中的全局变量。

  2,共享数据必须初始化,否则微软编译器会把没有初始化的数据放到.BSS段中,从而导致多个进程之间的共享行为失败。

  3。如果在一个DLL中这么写:

  #pragma data_seg("MyData")

  int g_Value; // Note that the global is not initialized.

  #pragma data_seg()

  DLL提供两个接口函数:

  int GetValue()

  {

  return g_Value;

  }

  void SetValue(int n)

  {

  g_Value = n;

  }

  然后启动两个进程A和B,A和B都调用了这个DLL,假如A调用了SetValue(5); B接着调用int m = GetValue(); 那么m的值不一定是5,而是一个未定义的值。因为DLL中的全局数据对于每一个调用它的进程而言,是私有的,不能共享的。假如你对g_Value进行了初始化,那么g_Value就一定会被放进MyData段中。换句话说,如果A 调用了SetValue(5); B接着调用int m = GetValue(); 那么m的值就一定是5!这就实现了跨进程之间的数据通信!

  编辑特别推荐:

  C程序的存储空间布局

上一页123下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答