我正在编译将在linux gcc 4.4.1 C99上运行的程序.
我只是把我的#defines放在一起分开将在windows或linux上编译的代码.但是,我收到了这个错误.
error: macro names must be identifiers.
使用此代码
#ifdef(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif
但是,当我更改为此错误时,错误已得到修复:
#if defined(WIN32)
/* Do windows stuff
#elif(UNIX)
/* Do linux stuff */
#endif
我只是想知道为什么我得到了这个错误以及为什么#defines不同?
非常感谢,
想象一下,我有这样的结构:
class Foo {
   String bar
}
现在想象一下,我有几个实例Foo,其bar值是baz_1,baz_2和zab_3.
我想编写一个只收集bar包含文本的值的collect语句baz.我无法让它工作,但它看起来像这样:
def barsOfAllFoos = Foo.getAll().bar
assert barsOfAllFoos == [ 'baz_1', 'baz_2', 'zab_3' ]
def barsWithBaz = barsOfAllFoos.collect{ if( it.contains( "baz" ) { it } ) } // What is the correct syntax for this?
assert barsWithBaz == [ 'baz_1', 'baz_2' ]
假设我有一个(x,y)对于一个行的起点始终是相同的,而(x,y)对于同一行的终点是变化的.该线也总是40px长.在程序开始时,线条以垂直方向发起(让我们称之为0度).基于用户输入,我需要通过仅改变结束(x,y)来从其原点重绘特定数量的度数.
如果您需要,可以考虑更多的食物:
我正试图计算这个,并使其在Java中工作.我可以根据圆弧段的弧长来计算点数,但我不知道如何让Java做到这一点.
我认为基于三角形角度它会更容易工作,因为我总是知道三角形两边的长度(一边由40px长线形成,另一边由该线的起点和边界形成JPanel)和这两条线形成的角度.尽管如此,我的大脑还是试图弄明白.任何帮助将非常感激.
更新:
@casablanca让我走上正轨.我刷了我的三角函数,这就是我如何使它工作.
首先,我没有意识到90度直接上升,但一旦我意识到我使我的解决方案反映了这一事实.我正在从框架的底部中心开始绘制我的线条.由于opposite我的用户给出的角度小于90度时三角形的一侧位于屏幕的右侧,当我的用户给出的角度大于90度时,三角形的一侧位于屏幕的左侧,我不得不调整公式以考虑到这一事实,因此我有四种方法,一种用于x屏幕左侧的坐标(当用户给定角度大于90度时),一种用于y当用户给定角度小于90度时,屏幕左侧的坐标(当用户给定角度大于90度时)和屏幕右侧的坐标相同.在int length所有方法是斜边的长度.  再次感谢您的帮助@casablanca!
public double leftSideX(double angle, int length){
    double x = frameWidth/2 - (length * Math.cos(Math.toRadians(90-(Math.toDegrees(angle)-90))));
    return x;
}
public double leftSideY(double angle, int length){
    double y = frameHeight - (length * Math.sin(Math.toRadians(90-(Math.toDegrees(angle)-90))));
    return y;
}
public double rightSideX(double angle, int length){
    double x = frameWidth/2 + (length * Math.cos(angle));
    return x;
}
public double rightSideY(double angle, int length){
    double y = frameHeight - (length …在我使用的几个编译器(gcc除了各种版本之外的所有版本)中,我得到一个C99 mode错误,例如int i在for循环表达式中而不是在它之前声明(如果我不使用该std=c99选项).在这里阅读之后,我理解gcc选项-ansi,-std=c89并且-std=iso9899:1990都评估为ANSI C标准,但我不明白为什么/如果我应该选择c89标准而不是更新的标准c99(这是我假设的最新标准).
此外,我看到isoC语言的类型标准的多个版本,其中第一个(根据我的理解)是ANSI标准的直接端口.  是否可以肯定地说iso将更新他们的C标准,但C的原始ANSI标准将始终是相同的?
奖金问题:
我实际上可以自己弄清楚这一点,我还没有花时间去做,所以如果有人知道他们的头顶那么这很好,否则没什么大不了的,我以后会搞清楚的:)
我有一本相当新的书The C Programming Language (ANSI).我的书总是显示像这样的循环:
int i;
for(i = 0; i < foo; i++)
但很多人(他们的小指中有大多数编程才能)都会像这样编写for循环:
(int i = 0; i < foo; i++)
如果我以第一种方式编写循环然后i应该可以访问整个函数是正确的,但是如果我以第二种方式编写它,那么i只能访问for循环REGARDLESS我编译的标准是什么?另一种问同样问题的方法,如果我使用c89标准进行编译,那么ifor循环的两个for循环都可以被整个函数访问,如果我使用c99标准进行编译,i那么整个函数可以访问第一个for循环i.第二个for循环只能通过for循环访问?
这是一个两部分问题.有一天有人回答了类似的问题(其中也包含有关PHP中此类数组的信息),但我找不到它.
1.)首先,在表单中输入标记的name元素末尾创建的数组的正确术语是什么?
<form>
    <input name="p_id[]" value="0"/>
    <input name="p_id[]" value="1"/>
    <input name="p_id[]" value="2"/>
</form>
2.)如何使用JavaScript从该数组中获取信息?具体来说,我现在只想计算数组的元素.这是我做的,但它不起作用.
function form_check(){
    for(var i = 0; i < count(document.form.p_id[]); i++){  //Error on this line
        if (document.form.p_name[i].value == ''){
            window.alert('Name Message');
            document.form.p_name[i].focus();
            break;
        }
        else{
            if (document.form.p_price[i].value == ''){
                window.alert('Price Message');
                document.form.p_price[i].focus();
                break;
            }
            else{
                update_confirmation();
            }
        }
    }
}
这些天苹果总是在新闻中用"我"和"我"来表达.人们对Apple最大的优势之一是缺乏Flash支持.去年我持相同观点,Apple选择排除Flash支持似乎毫无意义.HTML 5似乎已经改变了这一点.Flash最受欢迎的用户之一是YouTube,他们已经开始使用HTML 5潮流(http://www.youtube.com/html5).不过,我在这两种技术之间徘徊不前.
你有什么看法?对于刚出生的开发人员来说,学习Flash还是应该将他们的努力用于HTML5更好?
当用户打印某个网页时,我想将一些信息发送回我的数据库.我可以在IE中使用onbeforeprint()和onafterprint()我这样做,但我想以浏览器不可知的方式做同样的事情.只要它完成,就不关心我必须使用哪种技术组合(PHP,MySQL,JavaScript,HTML).有任何想法吗?
编辑:
还有一些问题.我尝试将我的功能放在我Print.css的图像中,但我正在弄乱它的一些方法.然后我尝试添加一个事件监听器,但我也无法让它正常工作.如果有人能提供一些关于如何在任何浏览器中打印前调用函数的更多细节,我将不胜感激.
编辑:
我现在正在放弃这个,我已经采取了另一种做我想做的方式.我期待着FireFox支持onbeforeprint()和onafterprint()的那一天.
我有一个stdClass对象数组,我想使用所有这些stdClass对象的一个特定字段构建一个逗号分隔列表.我的数组看起来像这样:
$obj1 = stdClass Object ( [foo] => 4 [bar] => 8 [foo-bar] => 15 );
$obj1 = stdClass Object ( [foo] => 16 [bar] => 23 [foo-bar] => 42 );
$obj1 = stdClass Object ( [foo] => 76 [bar] => 79 [foo-bar] => 83 );
$a = array(1=>$obj1 , 2=>$obj2 , 3=>$obj3);
我想破坏该数组中foo的所有stdClass对象以创建逗号分隔列表.所以期望的结果是:
4,16,76
有没有办法用implode(或其他一些神秘函数)做到这一点,而不必通过循环放置这个对象数组?
我需要查看一个互斥锁是否在if语句中被锁定或解锁,所以我这样检查它...
if(mutex[id] != 2){
    /* do stuff */
}
但是当我检查它时,gcc给了我以下错误:
error: invalid operands to binary != (have 'ptherad_mutex_t' and 'int')
那么我该如何检查互斥锁是否被锁定?
编辑:
我的问题的一个关键组成部分是我的线程(按设计)在将控制传递给另一个线程后立即锁定自己.因此,当线程A将控制传递给线程B时,线程A被锁定,线程B执行某些操作,然后当线程B完成时,它将解锁线程A.
这样做的问题是,如果线程B尝试解锁线程A并且线程A尚未完成锁定,则解锁的调用将丢失,线程A保持锁定状态,从而导致死锁.
更新:
我根据caf的建议重新制作了我的程序,但我仍遇到问题.我已经将我的程序模拟到了尽可能最好的结构caf中,但我现在甚至无法分辨出导致死锁的原因...我在这里创建了一个新问题,寻求我的代码帮助.
下面是caf的建议的可运行版本.我在线程a的函数中做了一个小的重新排序,没有它,线程a和线程b都会在创建时被锁定,等待一个永远不会改变的条件.
#include <pthread.h>
int run_a = 0;
pthread_mutex_t lock_a = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond_a = PTHREAD_COND_INITIALIZER;
int run_b = 0;
pthread_mutex_t lock_b = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond_b = PTHREAD_COND_INITIALIZER;
void *a(void *);
void *b(void *);
int main(){
    int status;
    pthread_t thread_a;
    pthread_t thread_b;
    pthread_create(&thread_a, NULL, a, (void *)0);
    pthread_create(&thread_b, NULL, b, (void …我正在努力学习汇编语言,我需要澄清一些事情.如果我错了,请纠正我,因为我对装配知之甚少.
我看的所有教程都有汇编程序的变量分配给一个内存地址0x0000,我可以理解你必须在程序集中手动分配内存地址,但是你怎么知道要使用哪个地址?
显然,从可能的最低内存地址开始是有意义的,但如果您分配的变量大于可用的内存,该0x0000怎么办?有问题的变量会延伸到0x0001或0x0002吗?如果它确实不会弄乱其他变量分配具有相似编号的空格(或者你不应该将它们分配给那些关闭)?
如果我有两个程序在同时运行的程序集中编写(在现代操作系统中)并且我在两个程序中使用了相同的内存地址,那么一个程序是否与另一个程序冲突,或者操作系统是否只分配一个可用的内存地址在程序中实际写的是什么?
有关该主题的任何信息表示赞赏.