小编und*_*ica的帖子

使用GCC将程序的源代码嵌入到二进制文件中,以便以后使用GDB

在我完成调试之前,我已经厌倦了不得不保持我的源代码不变.每次我更改代码时,GDB都会开始抱怨它:

警告:源文件比可执行文件更新.

直到我重新编译它,这不能总是快速完成.我认为,如果有可能将程序的源代码包含在其二进制文件中并使GDB使用它而不是其最新版本,那将会很棒.

任何人都可以建议如何做到这一点?这是否已实施?

debugging gcc gdb

9
推荐指数
2
解决办法
1542
查看次数

使用新式函数声明引用尚未提及的函数参数

被迫将可变长度数组功能用于打印方阵的辅助函数,我将其定义如下:

void print_matrix(M, dim)
     unsigned dim;
     int M[dim][dim];
{
    /* Print the matrix here. */
    ...
Run Code Online (Sandbox Code Playgroud)

好消息是,代码可以正常工作,并且其参数按照我希望的顺序排列。

dim坏消息是,我必须使用“旧式”函数声明语法才能引用的声明中尚未声明的参数M,这显然被认为是过时危险的

是否有一种直接的方法可以对“新式”函数声明执行相同的操作而不更改参数的顺序?(如果不是,在这种特殊情况下使用旧式语法是否可以接受?)

c c99 variable-length-array

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

就SFINAE而言,访问不存在的成员不被视为"错误"吗?

我为漂亮的打印对实现了一个重载:

template<typename P>
ostream &operator<<(ostream &os, const P &p) {
  using std::operator<<;
  os << '(' << p.first << ", " << p.second << ')';
  return os;
}
Run Code Online (Sandbox Code Playgroud)

但是,在它存在的情况下,编译器无法确定是应该应用标准重载还是应用上面定义的重载,即使选择应该是明显的:

int main() {
  cout << "SFINAE sure is hard to grasp!\n";
}

error: use of overloaded operator '<<' is
      ambiguous (with operand types 'std::ostream' (aka 'basic_ostream<char>') and
      'const char [30]')
Run Code Online (Sandbox Code Playgroud)

我不太明白问题是什么.我正在尝试打印的char数组没有first或没有second成员,所以用我的重载实例化它会导致错误.

SFINAE不应该尝试执行替换,发现缺少成员,并丢弃结果吗?如果没有,为什么?

c++ templates sfinae

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

标签 统计

c ×1

c++ ×1

c99 ×1

debugging ×1

gcc ×1

gdb ×1

sfinae ×1

templates ×1

variable-length-array ×1