小编eca*_*mur的帖子

c程序输出说明

我在网上的某个地方发现了这段代码.程序的输出是字符串字符串字符串有人请解释我为什么第一个secon和第三个printf语句打印相同的输出,即使它们的参数不同?

#include<stdio.h>
int main()
{
char a[2][3][3] = {'s','t','r','i','n','g'};
printf("%s\n", *a);
printf("%s\n", a);
printf("%s\n", **a);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

c multidimensional-array

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

在C++中初始化静态成员

根据我的理解,你在.cpp文件中而不是在.h中初始化静态成员的原因是这样就没有获得成员的几个实例的风险.接下来这个例子:

   //Foo.h
   #ifndef FOO_H
   #define FOO_H

   class Foo{
      static int a;

   }; 
   int Foo::a = 95; 
   #endif
Run Code Online (Sandbox Code Playgroud)

预处理程序指令确保此.h文件仅编译一次,这确保只有一个静态成员实例.是否可以这样做而不是在.cpp文件中启动静态成员?

c++

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

我无法在';'之前的代码预期表达式中解决此错误 代币

嗨我或多或少是c的新手,当我学习如何使用结构和联合时,我发现了这个错误:"预期的表达式';' 令牌"我一直在寻找错误,但我找不到它.我要问的是以下代码中需要的更正.

我在mac os x上使用Gnu C Compiler

#include <stdio.h>;
#include <stdlib.h>;

struct lista;
struct elemento;
union member{
  int i;
  struct lista * n;};

struct elemento{
  union member * v;
  struct elemento * n;};

struct lista{
  int len;
  struct elemento * n;};

void append(struct lista* a , union member * e);

int main(void){
  return 0;}

void append(struct lista * a , union member * e){
  struct elemento ** j= ((*a).n)*;                    /* error here */
  int c;
  for(c=0;c<(*a).len;c++){
    j=((**j).n)* ;}                                   /* error …
Run Code Online (Sandbox Code Playgroud)

c syntax-error

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

从linux运行python脚本中的函数运行整个脚本

def parseCommand():
    args = None
    if len (sys.argv) < 2:
        print('no command entered')
        return

    command = sys.argv[1]
    print ('command executed: %s' %command)
    if len(sys.argv) == 3:
        args = sys.argv[2]
    if len(sys.argv) > 3:
        args = sys.argv[2:]

    commandList = {
                'fA'              : fA(),
                'fB'              : fB(),
                }

    if args == None:
        return commandList[command]
    else:
        return commandList[command](args)

if __name__ == "__main__": 
    parseCommand()
Run Code Online (Sandbox Code Playgroud)

我从linux运行这个脚本.但是,当我运行python scriptname.py fA或python scriptname.py fB时,脚本似乎只是从上到下运行,执行这两个函数当我将其更改为

if __name__ == "__main__": 
    fA()
Run Code Online (Sandbox Code Playgroud)

要么

if __name__ == "__main__": 
    fB()
Run Code Online (Sandbox Code Playgroud)

并运行python scriptname.py frtom linux它只执行我调用的函数. …

python linux

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

序列点和评估顺序(预增量)

我的一些同事今天进行了辩论,我想澄清一下.它是关于表达式中的评估顺序和序列点.标准中明确指出,C/C++在表达式中没有从左到右的评估,这与Java之类的语言不同,后者保证具有从左到右的顺序.因此,在下面的表达式中,在评估最右边的操作数(C)之前,对二进制操作中最左边的操作数(B)的求值进行排序:

A = B B_OP C
Run Code Online (Sandbox Code Playgroud)

根据序列前序列(Undefined Behavior)和Bjarne的TCPPL 3rd ed 下的CPPReference,下面的表达式是UB

x = x++ + 1;
Run Code Online (Sandbox Code Playgroud)

它可以被解释为像BUT这样的编译器,据说下面的表达式在C++ 11中显然是一个明确定义的行为

x = ++x + 1;
Run Code Online (Sandbox Code Playgroud)

那么,如果上面的表达式定义得很清楚,那么"命运"是什么呢?

array[x] = ++x;
Run Code Online (Sandbox Code Playgroud)

似乎没有定义后增量和后减量的评估,但定义了预增量和预减量.

注意:这不用于实际代码中.Clang 3.4和GCC 4.8明确警告了增量前后序列点.

c++ language-lawyer c++11

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