小编Pra*_*ngh的帖子

是否可以在预处理时或编译时修改"函数调用"

第一个问题:是否可以使用某些参数调用一个函数,并在编译之后在预处理时或编译时将其修改为其他类似的东西

#define func(a,b) func(a,sizeof(a),b)
Run Code Online (Sandbox Code Playgroud)

有些人可能会想到为什么会出现这样的需求.

实际上我使用visual studio 2010在Windows中移植代码,并且有一些函数被弃用,如strcpy(),strcat()等.它说使用strcpy_s()代替.

我知道我可以使用#pragma disable(warning: )或通过提供以下标志来抑制它:

_CRT_NONSTDC_NO_DEPRRECATE
_CRT_SECURE_NO_DEPRECATE
_CRT_SECURE_NO_WARNINGS
Run Code Online (Sandbox Code Playgroud)

但我不想忽视或压制它们.

我试着只是简单地替换字符串而不是忽略使用:

#define strcpy strcpy_s
Run Code Online (Sandbox Code Playgroud)

就像在这里http://msdn.microsoft.com/en-us/library/td1esda9.aspx我读过,如果我不提供第二个arg,那么参数不会不匹配.

我的意思是如果我这样使用它应该没问题:

#define strcpy strcpy_s
strcpy(dest,src);
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.它仍然会产生警告.

strcpy_s的定义是:

errno_t strcpy_s(
   char *strDestination,
   size_t numberOfElements,
   const char *strSource 
);
Run Code Online (Sandbox Code Playgroud)

第二个问题:第一个参数是一个指向动态分配内存的指针,所以如何获得该指针指向的内存大小.虽然我读到这是不可行的,但必须有某种方式(希望如此).

顺便问一下是_countof(var)什么?

c macros visual-studio-2010 preprocessor-directive

5
推荐指数
1
解决办法
150
查看次数

sed 中 {//!p;} 的名称和含义

我正在寻找一个 sed 命令,它可以打印模式匹配旁边的行直到文件末尾。

不知怎的,我得到了这个命令:

sed -n '/pattern match/,${//!p;}' Readme
Run Code Online (Sandbox Code Playgroud)

这确实解决了目的,但我不明白{//!p;}。它叫什么或者有什么用途?

因此,如果我想根据不同的场景跳过多行,而不仅仅是具有模式的行,我应该能够做到这一点。

我知道有不同的命令可以解决这个目的;grep、awk 是最接近的。但我想了解这种方法。

也对问题的标题感到抱歉,因为我无法更好地了解如何提出此查询。

bash scripting sed

2
推荐指数
1
解决办法
1624
查看次数

为什么在赋值发生时调用了Paramaterized构造函数?

我的问题是最后的陈述,即之前的陈述 return 0;

当我们尝试将int值分配给对象时,为什么要调用参数化构造函数.

我的代码:

#include<iostream>
using namespace std;
class Test {
private:
    int i;
    public:
    Test(int s=0):i(s) {
            cout<<"param ctor: "<<i<<endl;
    }
};

int main()
{
    Test a;         //param ctor called
    Test b(5);      //param ctor called
    //b(a);         //error as we have not implemented copy ctor
    b=a;            //compiler provided assignment opr. called
    b=100;          //why param ctor called for this.??
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

  param ctor: 0
  param ctor: 5
  param ctor: 100
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor assignment-operator

1
推荐指数
1
解决办法
67
查看次数