小编fef*_*efe的帖子

如何检查函数调用中是否提供了参数?

假设我有一个函数dummy,带有2个参数.当函数调用中未提供时,参数可以具有默认值.但我怎么知道是不提供参数?

我知道我可以nargin像这样使用

function dummy(arg1, arg2)
if nargin < 2
    arg2 = 0;
end
if nargin < 1
    arg1 = 0;
end
% function body
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以根据参数名称检查是否提供了参数?有点像supplied(arg2) == false.

我问这个是因为,有时我想在参数列表的前面添加新参数(因为它可能没有默认值),然后我必须改变所有if nargin ....如果我可以按名称检查,则无需更改任何内容.

matlab

38
推荐指数
1
解决办法
3万
查看次数

为什么默认定义_GNU_SOURCE以及如何将其关闭?

我正在使用g ++,它告诉我我_GNU_SOURCE在命令行上定义,但我没有.

我现在_GNU_SOURCE可以使用定义来启用gnu扩展,但现在我不想要这些扩展.我补充说-std=c++0x -pedantic,但_GNU_SOURCE仍然是定义.

输出g++ -v如下:

$ g++ -v
Using built-in specs.
COLLECT_GCC=/usr/bin/g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
Run Code Online (Sandbox Code Playgroud)

当我给它一个空文件并编译时g++ -E -dD -std=c++98 -pedantic empty.cpp,我得到这个:

$ g++ -E -dD -std=c++98 …
Run Code Online (Sandbox Code Playgroud)

gcc

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

初始化中的评估顺序

在以下程序中:

#include <iostream>
struct I {
    int i;
    I(){i=2;}
    I(int _i){i=_i;}
};
int a[3] = {a[2] = 1};
int aa[3][3] = {aa[2][2] = 1};
I A[3] = {A[2].i = 1};
I AA[3][3] = {AA[2][2].i = 1};
int main(int argc, char **argv) {
    for (int b : a) std::cout << b << ' ';
    std::cout << '\n';
    for (auto &bb : aa) for (auto &b : bb) std::cout << b << ' ';
    std::cout << '\n';
    for (auto &B : A) …
Run Code Online (Sandbox Code Playgroud)

c++ initialization language-lawyer aggregate-initialization

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

在c ++中获取表达式的含义

我正在读取c ++中的遗留代码,它定义了一个数组,然后分配给一个变量(见下文).虽然我过去使用过指针和引用,但我不确定这个表达式的含义.问题:
1.这个表达的含义是什么?
2.当(WORD*)中已经存在另一个指针时,为什么外部指针是必需的?
提前致谢 !

BYTE txbuf[16]; 
...
WORD crc = *((WORD*)(&txbuf[2]));
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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