我如何自定义fprintf以启用禁用

时间:2019-05-16 17:27:09

标签: c++ debugging

我想自定义fprintf函数以启用/禁用日志记录

我的项目使用Makefile。

#define ENABLE_LOG 
void log(fmt, ...){
  #ifdef ENABLE_LOG
    va_list vargs;
    va_start(vargs, fmt);
    fprintf(stderr, vargs);
    va_end(vargs);
  #endif
}

log("Test"); # build error
log("TEST %d", 1); # build error

我如何创建可以使用log启用/禁用的自定义ENABLE_LOG函数

1 个答案:

答案 0 :(得分:1)

您需要使用vfprintf()。另外,我将创建一个空宏,以避免调用空函数。

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_help, null);
     sendEmail = (Button)v.findViewById(R.id.SendBtn);
     msg = (EditText)v.findViewById(R.id.msgTxt);

      sendEmail.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v){
           String message = msg.getText().toString();
            sendEmail(message);
        }

    });
        return v;
}

此外,请注意,已经有一个名为log的C ++函数。您可能会考虑使用其他名称(特别是如果您使用可怕的#define ENABLE_LOG #ifdef ENABLE_LOG void log(const char *fmt, ...) { va_list vargs; va_start(vargs, fmt); vfprintf(stderr, fmt, vargs); va_end(vargs); } #else #define log(fmt, ...) #endif -即使您的代码看起来像纯C。)