设为首页 加入收藏

TOP

C编程中良好的错误处理机制
2012-11-02 12:38:37 来源: 作者: 【 】 浏览:383
Tags:编程 良好 错误 处理 机制
  main.c
  
  #include ……
  
  ……
  
  #ifdef ACR320_V3
  
  #define PORT “Speaker”
  
  #else
  
  #define PORT “Headphone”
  
  #endif
  
  static char *command;
  
  #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
  
  #define error(…) do {\
  
  fprintf(stderr, “%s: %s:%s:%d: ”,command,__FILE__, __FUNCTION__, __LINE__); \
  
  fprintf(stderr, __VA_ARGS__); \
  
  putc(‘\n', stderr); \
  
  } while (0)
  
  #else
  
  #define error(args…) do {\
  
  fprintf(stderr, “%s:%s:%s:%d: ”,command,__FILE__, __FUNCTION__, __LINE__); \
  
  fprintf(stderr, ##args); \
  
  putc('\n', stderr); \
  
  } while (0)
  
  #endif
  
  int volume_set(void)
  
  {
  
  int err;
  
  snd_mixer_t *mixerFD;
  
  snd_mixer_elem_t *elem;
  
  Volume_t * p =  &v_state;
  
  command = “amixer”;
  
  if((err = snd_mixer_open(&mixerFD,0))<0){
  
  error(“Mixer %s open error: %s\n”, PORT, snd_strerror(err));
  
  return err;
  
  }
  
  if((err = snd_mixer_attach(mixerFD,“default”))<0){
  
  error(“Mixer %s attach error: %s\n”, PORT, snd_strerror(err));
  
  snd_mixer_close(mixerFD);
  
  return err;
  
  }
  
  if((err = snd_mixer_selem_register(mixerFD,0,0))<0){
  
  error(“Mixer %s register error: %s\n”, PORT, snd_strerror(err));
  
  snd_mixer_close(mixerFD);
  
  return err;
  
  }
  
  if((err = snd_mixer_load(mixerFD))<0){
  
  error(“Mixer %s load error: %s\n”, PORT, snd_strerror(err));
  
  snd_mixer_close(mixerFD);
  
  return err;
  
  }
  
  for(elem=snd_mixer_first_elem(mixerFD);elem;elem=snd_mixer_elem_next(elem))
  
  {
  
  if(snd_mixer_elem_get_type(elem)==SND_MIXER_ELEM_SIMPLE && snd_mixer_selem_is_active(elem))
  
  {
  
  if(!strcmp(PORT,snd_mixer_selem_get_name(elem)))
  
  {
  
  snd_mixer_selem_get_playback_volume_range(elem,&minVolume,&maxVolume);
  
  snd_mixer_selem_get_playback_volume(elem,(snd_mixer_selem_channel_id_t)0,&Volume);
  
  snd_mixer_selem_set_playback_switch(elem,(snd_mixer_selem_channel_id_t)0,(long)1);//设置不静音
  
  snd_mixer_selem_set_playback_volume(elem,(snd_mixer_selem_channel_id_t)lr,volume);
  
  }
  
  }
  
  }
  
  snd_mixer_close(mixerFD);
  
  return 0;
  
  }
  
  error.c
  
  #include <string.h>
  
  ……
  
  const char *snd_strerror(int errnum)
  
  {
  
  if (errnum < 0)
  
  errnum = -errnum;
  
  if (errnum < SND_ERROR_BEGIN)
  
  return (const char *) strerror(errnum);
  
  errnum -= SND_ERROR_BEGIN;
  
  if ((unsigned int) errnum >= sizeof(snd_error_codes) / sizeof(const char *))
  
  return “Unknown error”;
  
  return snd_error_codes[errnum];
  
  }
  
  ……
  
  string.h
  
  ……
  
  extern char *strerror (int __errnum) __THROW;
  
  ……
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C小程序 - 几个库函数 下一篇C语言—pipe与fork结合

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: